特定のComponentを持つGameObjectを視覚的にわかりやすくしたいという要望があり、少しやり方を調べてみました。
例コード
UnityエディタのHierarchyウィンドウで表示されるゲームオブジェクトの色を変更するクラスです。 特定のコンポーネントが存在する場合、そのゲームオブジェクトの色を変更します。 例として、Imageコンポーネントが存在する場合には色を変える場合のコードが次になります。
#if UNITY_EDITOR using UnityEditor; using UnityEngine; using UnityEngine.UI; [InitializeOnLoad] public class HierarchyColor { static HierarchyColor() { EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI; } private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect) { var gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject; if (gameObject != null && gameObject.GetComponent<Image>() != null) { EditorGUI.DrawRect(selectionRect, Color.red); GUI.color = Color.black; EditorGUI.LabelField(selectionRect, gameObject.name,new GUIStyle() { fontStyle = FontStyle.Bold }); GUI.color = Color.white; } } } #endif
InitializeOnLoad
エディタがロードされたときに一度だけ呼び出されます docs.unity3d.com
EditorApplication.hierarchyWindowItemOnGUI
Hierarchyウィンドウで各ゲームオブジェクトが描画されるたびに、特定のイベントが発生します。 このイベントのハンドラは、ゲームオブジェクトのインスタンスIDと描画領域のRectを引数として受け取ります。これらの情報を利用してハンドラ内でゲームオブジェクトの描画方法をカスタマイズすることが可能です。
EditorUtility.InstanceIDToObject
引数として与えられたインスタンスIDを使用して、そのIDに関連付けられたオブジェクトを取得します。