LoginSignup
5

More than 5 years have passed since last update.

ゲームオブジェクトに自動でプレハブをアタッチするスクリプト

Posted at

「Unity プレハブ 自動アタッチ」などでググってもヒットしなかったので、メモ。

コード

Prefabsフォルダ以下のプレハブの取得し、アタッチを行うスクリプト。

PrefabHolder.cs
#if UNITY_EDITOR
    /// <summary>
    /// リセット時処理
    /// </summary>
    private void Reset()
    {
        var guids_prefab = AssetDatabase.FindAssets("t:prefab", new string[] { "Assets/Prefabs" } );
        preloadPrefabs = new GameObject[guids_prefab.Length];
        for ( int i = 0; i < guids_prefab.Length; i ++ )
        {
            string path_prefab = AssetDatabase.GUIDToAssetPath(guids_prefab[i]);
            preloadPrefabs[ i ] = AssetDatabase.LoadAssetAtPath<GameObject>(path_prefab);
        }
    }
#endif

解説

preloadPrefabs[ i ] = AssetDatabase.LoadAssetAtPath<GameObject>(path_prefab);
「プレハブをアタッチ」する部分。
パスは"Assets/"からスタートし、拡張子も含める。

var guids_prefab = AssetDatabase.FindAssets("t:prefab", new string[] { "Assets/Prefabs" } );
プロジェクト内のアセットを検索し、見つかったアセットのGUIDを返す。
今回はパスを得たいのでAssetDatabase.GUIDToAssetPath()を使ってパスに変換している。

検索は、プロジェクトビューの検索と同じ構文で行う。
また、第二引数にフォルダを指定することで、検索するフォルダを指定出来る。
"Assets/"から始めることに注意。

private void Reset()
わざわざエディタ拡張しなくても、インスペクタビューのコンテキストメニューから呼べるので便利。

参考

Resources以外からアセットをロードする【Unity】【エディタ拡張】
http://kan-kikuchi.hatenablog.com/entry/AssetDatabase_LoadAsset

AssetDatabase.FindAssets
https://docs.unity3d.com/jp/540/ScriptReference/AssetDatabase.FindAssets.html

【Unity】プロジェクト内のScriptableObjectを見つける方法
http://tsubakit1.hateblo.jp/entry/2016/03/08/231929

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5