Hierarchy Window を拡張するには EditorApplication.hierarchyWindowItemOnGUI
を利用する
拡張処理を記述しないで、最低限の処理のみだと以下のコードになる
using UnityEditor; using UnityEngine; public class HierarchyExtension { [InitializeOnLoadMethod] private static void Initialize() { EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI; } private static void HierarchyWindowItemOnGUI(int instanceId, Rect selectionRect) { // 描画処理を記述 } }
GameObject のコンポーネント一覧を表示するように拡張した例
using UnityEditor; using UnityEngine; public class HierarchyExtension { [InitializeOnLoadMethod] private static void Initialize() { EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI; } private const int IconSize = 15; private static void HierarchyWindowItemOnGUI(int instanceId, Rect selectionRect) { // GameObject が取得できない場合は SceneAsset var obj = EditorUtility.InstanceIDToObject(instanceId) as GameObject; if (obj == null) return; // 所持しているコンポーネント一覧を取得 var components = obj.GetComponents<Component>(); if (components.Length <= 0) return; // 表示数分 x の位置を変更 selectionRect.x = selectionRect.width - IconSize * components.Length; selectionRect.width = IconSize; foreach (var component in components) { // コンポーネントのアイコン画像を取得 var texture2D = AssetPreview.GetMiniThumbnail(component); GUI.DrawTexture(selectionRect, texture2D); selectionRect.x += IconSize; } } }