Prefab の設定を楽にしたくて、エディター拡張を作ったのですが、
もはや Prefab を Hierarchy に移すのさえ面倒だったのでやり方を調べました。
前提環境は以下の通りです :
- Unity 2018.4.20f1 Personal
動作としては、以下のような流れになります。
- Prefab の GameObject を取得する
- Prefab を一旦 Hierarchy に配置する
- 配置した Prefab を展開する
- ごにょごにょする
この記事では、 1 ~ 3 までを書きます。
まずは Prefab の GameObject を取得する必要があるのですが、
UnityPackage などで配布する場合、 Path は変更される可能性があるので、
アセットの GUID からアクセスを試みます。
アセットの GUID は .meta
の guid
フィールドに書かれている値です。
コードとしては以下のような感じで GameObject を取得できます。
private const string Guid = "c60b79bdc1de7d247b272b70086e6580"; private static void GetPrefab() { var path = AssetDatabase.GUIDToAssetPath(Guid); return AssetDatabase.LoadAssetAtPath<GameObject>(path); }
次は、これを Hierarchy に設置します。
private static GameObject ToHierarchy(GameObject prefab) { return (GameObject) PrefabUtility.InstantiatePrefab(prefab) }
第 1 引数の prefab
には先ほど取得した GameObject を渡します。
戻り値には、 Hierarchy での Prefab のインスタンスが返されます。
最後に、これを Unpack してあげます。
private static void UnpackPrefab(GameObject prefab) { PrefabUtility.UnpackPrefabInstance(prefab, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction); }
これだけで、最初の流れができます。
ということで、メモでした。