土鍋で雑多煮

UnityでXR・ゲーム開発をしています。学んだことや備忘録、趣味の記録などを書いていきます。

【備忘録】Prefabの動的生成

よく使うので備忘録として書きます。

prefabの動的生成

GameObject obj = (GameObject) Resources.Load("Prefabs/Prefab1");
GameObject GeneratedObj = Instantiate(obj, Vector3.zero, Quaternion.identity);

Resources.Load("パス")でResourcesフォルダ内のファイルをロードできるのですが、後ろのカッコ内はパスを入力できるので、
「Resourcesフォルダ内のPrefabsフォルダの中にあるPrefab1」と指定できます。
※Resourcesフォルダは自分で作る必要があります。
その後、Instantiate(生成するオブジェクト, 位置, 回転)で生成できます。

Resources.Loadについて

ファイルをResourceフォルダの正確な場所に配置しなければならないので使い勝手が悪い。
そこでインスペクター上からPrefabを設定できる方がいいかもしれない。

[SerializeField]
GameObject obj;
GameObject GeneratedObj = Instantiate(obj, Vector3.zero, Quaternion.identity);

ちなみに

子オブジェクトとしてPrefabを生成したい時がある

と思うのですが、
その場合は上記のスクリプト

obj.transform.parent = content.transform;

と足すことでできます。※contentは親オブジェクト

しかしUIを子オブジェクトとして生成する場合、上記のようにではなく

obj.transform.SetParent(content.transform, false);

のほうが良いらしいです。

Prefab生成時に実行されるもの

StartやAwakeなど、素の状態だとゲーム開始時に実行されるものが実行される。