質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2070閲覧

[Unity] ランタイムでの.prefabファイルの読み込み手段について

Wiz_Exmachina

総合スコア36

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/11/08 09:35

前提・実現したいこと

Unityでいわゆる音楽ゲームを作っています。
その譜面(多数のノーツ(ゲームオブジェクト)を子に持つゲームオブジェクトを、自由度や、扱いの良さから、.prefabファイルで管理し、
外部から、自由に追加し、ゲームからロードし、ゲームオブジェクトとしてInstantiateしたいと考えています。
もちろん、prefabが参照するスクリプトなどはビルドに組み込まれています。

試したこと

実現する手段として、Streaming Assetsや、Resourceフォルダなどについて調べましたが、
StreamingAssetsを用いるには、Asset Bundleの理解が必要で、一日かけても理解が及びませんでした。
また、Resourceフォルダも、ビルドすると専用形式にコンパイルされているようで、ランタイムで追加などの操作は厳しいと判断しました。

### 知りたいこと
外部からプレハブを読み込むのに、ここまで複雑な手段は必要なのでしょうか。
ランタイム時に、外部からプレハブを読み込む、なるべくシンプルな、よりよい手段はあるのでしょうか。
もしご存じであればご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問と全く関係ないですが

StreamingAssetsを用いるには、Asset Bundleの理解が必要で

StreamingAssetsとAssetBundleは全く関係ありません

Unityだとビルド時に、ファイルを設定に応じて適宜変換されますが、StreamingAssetsはその変換を避けるために使用します。
テキストファイルなどをそのまま読み書きしたいときに使用します。
なお、ビルド後にStreamingAssetsにファイルを追加することは出来ませんので、この方法で外部ファイルを読み込んで追加するようなことは出来ません。
(とはいえ、Application.persistentDataPathやApplication.temporaryCachePathに保存すれば、ほぼ同じように扱えるので、特に問題はないとは思いますが)

対して、AssetBundleは後付けでプレハブなどを追加するのに使用します。
今回はテキストファイルで大丈夫だと思いますが、3Dモデルやプレハブ化したファイルはこの方法でしか読み込めないので、余裕があれば理解しておくのがよろしいかと思います。

投稿2018/11/08 11:31

fiveHundred

総合スコア9796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wiz_Exmachina

2018/11/09 00:47

回答ありがとうございます! 今回は、Jsonでやってしまうほうがよさそうですね。 AssetBundleは、やけに小難しく感じたため、誤解してしまいました。今回は諦めますが、 そのうち勉強しておこうと思います。
guest

0

ベストアンサー

PrefabはEditor上のみで、実行時には読み込ません。
なぜなら、WindowsやAndroid・iOSなどのプラットフォームごとにビルドされるからです。
ビルドのためには他のスクリプトなどの情報が必要ですが、ビルド後は必要な情報が抜け落ちてしまいます。
ですので実行時にPrefabをロードする事はできません。

対処として
Asset Bundleを使用するか、
譜面データをJsonなどで持ち、それを自分で読み込みゲームオブジェクトを生成するなどがあります。

投稿2018/11/08 10:56

nakajimakotaro

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wiz_Exmachina

2018/11/08 11:42

回答ありがとうございます。 なるほど、.prefabはEditor専用と断って頂き、踏ん切りがつきそうです。 一つ引っかかることがあって、自分で方法を調べていた時も、AssetBundleが度々目についたのですが、いまいちよくわからなかったので、質問させていただいてもよろしいでしょうか。 AssetBundleでこの問題を対処した場合、どのような解決策になるのでしょうか。 また、もしそれでプレハブのロードが可能になる場合、その方法の、コードの例、または使うメソッドや、参考になるページなど、何かヒントをいただけないでしょうか。 よろしくお願いします。
nakajimakotaro

2018/11/08 20:50

AssetBundleは実行時にPrefabを読み込める仕組みです。 流れとしては、 エディタ上でAssetBundleをビルドし、 そのAssetBundleをランタイムで読み込みます。 このブログを読んでみると良いと思います。 http://tsubakit1.hateblo.jp/entry/2015/12/16/233336
Wiz_Exmachina

2018/11/09 00:47

ありがとうございます。 読んでみたところ、AssetBundleは、開発者側でアセットバンドルを作成、用意してから読み込ませるものであり、不特定多数の、しかもプレハブ単体で読み込ませるには向いていなさそうですね... あきらめてセーブ用クラスとJsonUtilityで対処しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問