はじめに
今回はEditorUtility.CollectDependencies
という依存する全てのアセットを取得できる便利メソッドを紹介したいと思います。
EditorUtility.CollectDependencies
public static Object[] CollectDependencies (Object[] roots);
引数に入れたオブジェクトの配列(別にGameObject
限定というわけではないので注意)が依存しているオブジェクトを返してくれます。
活用例
公式サンプル
公式サンプルとして、ゲームオブジェクトが依存するオブジェクトを選択するエディタ拡張が紹介されていました。
using UnityEngine; using UnityEditor; public class CollectDependenciesExample : EditorWindow { static GameObject obj = null; [MenuItem("Example/Collect Dependencies")] static void Init() { // Get existing open window or if none, make a new one: CollectDependenciesExample window = (CollectDependenciesExample)EditorWindow.GetWindow(typeof(CollectDependenciesExample)); window.Show(); } void OnGUI() { obj = EditorGUI.ObjectField(new Rect(3, 3, position.width - 6, 20), "Find Dependency", obj, typeof(GameObject)) as GameObject; if (obj) { Object[] roots = new Object[] { obj }; if (GUI.Button(new Rect(3, 25, position.width - 6, 20), "Check Dependencies")) Selection.objects = EditorUtility.CollectDependencies(roots); } else EditorGUI.LabelField(new Rect(3, 25, position.width - 6, 20), "Missing:", "Select an object first"); } void OnInspectorUpdate() { Repaint(); } }
EditorUtility-CollectDependencies - Unity スクリプトリファレンス
ちなみにSelection.objects
を利用することで、任意のオブジェクトを選択したり、選択しているオブジェクトを取得したりできるみたいです。
public static Object[] objects ;
ヒエラルキー上のゲームオブジェクトが依存しているオブジェクトを調べる
次はヒエラルキー上のゲームオブジェクトが依存しているオブジェクトを調べてみるコードを書いてみます。
public static class HierarchyDependenciesCollector { [MenuItem("Tools/Collect Hierarchy Dependencies")] public static void Execute() { // ヒエラルキー上の全てのオブジェクトを取得 GameObject[] gameObjects = Resources.FindObjectsOfTypeAll(typeof(GameObject)) .Select(c => c as GameObject) .Where(c => c != null && c.hideFlags != HideFlags.NotEditable && c.hideFlags != HideFlags.HideAndDontSave) .ToArray(); // 依存先のオブジェクトを選択 Selection.objects = EditorUtility.CollectDependencies(gameObjects); } }
またヒエラルキー上のゲームオブジェクトを取得するのはこちらでいけるみたいです。(結構昔に書いた記事なのでワンチャン間違っているかもですが)
【Unity】Hierarchy上のゲームオブジェクト(コンポーネント)を全て取得する方法 - はなちるのマイノート
選択しているオブジェクトの依存先を調べる
public static class SelectedObjectDependenciesCollector { [MenuItem("GameObject/Collect Dependencies", false, 0)] public static void Execute() { // 選択しているオブジェクト取得 var selectedObjects = Selection.objects; // 依存先のオブジェクトを選択 Selection.objects = EditorUtility.CollectDependencies(selectedObjects); } }
またMenuItem
属性は結構色々な設定の仕方があるので、興味がある方は以下の記事が参考になるかと思います。
kan-kikuchi.hatenablog.com