読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Prefabの状態を保ったままのオブジェクトをプログラムから作成する【Unity】

Unity

このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.4.0f3


はじめに

今回はPrefabの状態を保ったままのオブジェクトをプログラムから作成する方法のご紹介です!

Prefabに接続された状態のインスタンスを作成するとも言えるかと思います。


言葉だとちょっと分かり難いですが、

ようはProjectにあるPrefabをHierarchyにドラックしてオブジェクトを作成するやり方を

プログラムから行うということです。


f:id:kan_kikuchi:20161011132749j:plain


なお、エディター上だけの方法ですのご注意ください。


GameObject.Instantiate

普通、Prefabからオブジェクトを作成する際はGameObjectのInstantiateを使います。

GameObject prefab   = Resources.Load<GameObject> ("Prefab");
GameObject instance = GameObject.Instantiate (prefab); 


しかし、このやり方だとRevertやApplyはできず、名前も青くなく、(clone)という名前も付きます。


f:id:kan_kikuchi:20161011133159p:plain


PrefabUtility

Prefabの状態を保ったままのオブジェクトを作成したい場合は、

PrefabUtilityのInstantiatePrefabを使います。

//PrefabUtilityを使うにはusing UnityEditor;が必要
GameObject prefab   = Resources.Load<GameObject> ("Prefab");
GameObject instance = PrefabUtility.InstantiatePrefab(prefab) as GameObject; 


このやり方であれば、ProjectからHierarchyにドラックした時と同じ状態で生成できます。


f:id:kan_kikuchi:20161011133310p:plain


また、Applyをプログラムから行いたい場合はReplacePrefabを使い、

PrefabUtility.ReplacePrefab(
  instance, 
  PrefabUtility.GetPrefabParent(instance),
  ReplacePrefabOptions.ConnectToPrefab
);  


Revertをプログラムから行いたい場合はRevertPrefabInstanceを使います。

PrefabUtility.RevertPrefabInstance (instance);