アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

プロジェクト内のPrefabが使っている全てのアセットを取得するエディタ拡張

こんにちは!ジェイです。前回の記事で不要なアセットを削除してくれるAsset Hunter Proを紹介しましたが、何らかの理由で使えない人向けにPrebafが使っている全てのアセットを取得するエディタ拡張を紹介します。

記事内広告

EditorUtility.CollectDependencies

詳しくは以上のマニュアルを参照してください。使い方は、引数に対象のオブジェクトを配列で渡すだけで、そのオブジェクトが依存している物を取得出来ます。

//objはObjectで、依存するアセットを取得したい対象、dependenciesObjectsが依存するアセット群
Object[] dependenciesObjects  = EditorUtility.CollectDependencies(new Object[] { obj });

プロジェクト内の指定したオブジェクトに使われているアセットを全て表示するウィンドウを実装すると以下のようになります。Hierarchy上のオブジェクトにもProject上のPrefabにも使えます。Editorフォルダの中に以下のスクリプトを置いてください。

using UnityEngine;
using UnityEditor;

public class CollectDependenciesExample : EditorWindow
{    
    //EditorUtility.CollectDependenciesを使う対象のオブジェクト
    private GameObject _targetObject = null;
  
    //対象のオブジェクトが依存しているオブジェクト群
    private Object[] _dependenciesObjects;

    //メニューからウィンドウを開く
    [MenuItem("Example/Collect Dependencies")]
    public static void Open ()
    {
        CollectDependenciesExample.GetWindow(typeof(CollectDependenciesExample));
    }

    private void OnGUI()
   {
        //対象のオブジェクト取得
        _targetObject = EditorGUILayout.ObjectField("", _targetObject, typeof(GameObject), allowSceneObjects:true) as GameObject;
    
        //ボタンが押されたら依存関係の取得
        if (GUILayout.Button("依存関係を取得"))
        {
            _dependenciesObjects = EditorUtility.CollectDependencies(new Object[] { _targetObject });
        }

        //依存しているオブジェクトの表示
        if (_dependenciesObjects == null)
        {
            return;
        }
        foreach (var dependenciesObject in _dependenciesObjects)
        {
            EditorGUILayout.ObjectField(dependenciesObject.name, dependenciesObject, typeof(Object), allowSceneObjects:true);
        }
    }
}

アイコンは鬼塚@取締役さんからお借りしました。

+3