「Unity プレハブ 自動アタッチ」などでググってもヒットしなかったので、メモ。
コード
Prefabsフォルダ以下のプレハブの取得し、アタッチを行うスクリプト。
#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