この記事でのバージョン
Unity 5.4.0f3
はじめに
今回はPrefabの状態を保ったままのオブジェクトをプログラムから作成する方法のご紹介です!
Prefabに接続された状態のインスタンスを作成するとも言えるかと思います。
言葉だとちょっと分かり難いですが、
ようはProjectにあるPrefabをHierarchyにドラックしてオブジェクトを作成するやり方を
プログラムから行うということです。
なお、エディター上だけの方法ですのご注意ください。
GameObject.Instantiate
普通、Prefabからオブジェクトを作成する際はGameObjectのInstantiateを使います。
GameObject prefab = Resources.Load<GameObject> ("Prefab");
GameObject instance = GameObject.Instantiate (prefab);
しかし、このやり方だとRevertやApplyはできず、名前も青くなく、(clone)という名前も付きます。
PrefabUtility
Prefabの状態を保ったままのオブジェクトを作成したい場合は、
PrefabUtilityのInstantiatePrefabを使います。
//PrefabUtilityを使うにはusing UnityEditor;が必要 GameObject prefab = Resources.Load<GameObject> ("Prefab"); GameObject instance = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
このやり方であれば、ProjectからHierarchyにドラックした時と同じ状態で生成できます。
また、Applyをプログラムから行いたい場合はReplacePrefabを使い、
PrefabUtility.ReplacePrefab( instance, PrefabUtility.GetPrefabParent(instance), ReplacePrefabOptions.ConnectToPrefab );
Revertをプログラムから行いたい場合はRevertPrefabInstanceを使います。
PrefabUtility.RevertPrefabInstance (instance);