なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Unity で Project から Hierarchy へスクリプトを使って Prefab を展開したい

Prefab の設定を楽にしたくて、エディター拡張を作ったのですが、
もはや Prefab を Hierarchy に移すのさえ面倒だったのでやり方を調べました。


前提環境は以下の通りです :

  • Unity 2018.4.20f1 Personal

動作としては、以下のような流れになります。

  1. Prefab の GameObject を取得する
  2. Prefab を一旦 Hierarchy に配置する
  3. 配置した Prefab を展開する
  4. ごにょごにょする

この記事では、 1 ~ 3 までを書きます。

まずは Prefab の GameObject を取得する必要があるのですが、
UnityPackage などで配布する場合、 Path は変更される可能性があるので、
アセットの GUID からアクセスを試みます。

アセットの GUID は .metaguid フィールドに書かれている値です。
コードとしては以下のような感じで 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);
}

これだけで、最初の流れができます。
ということで、メモでした。