【Unity】【エディタ拡張】Hierarchyの表示をカスタムする

Hierarchyの表示をカスタムする方法です。

Unity2018.3.1

ソースコード

Hierarchyの表示をカスタムするには、EditorApplication.hierarchyWindowItemOnGUIにコールバックを登録します。

using UnityEngine;
using UnityEditor;

public class Example  
{
    [InitializeOnLoadMethod]
    private static void AddHierarchyItemOnGUI() {
        EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
    }

    private static void HierarchyWindowItemOnGUI (int instanceID, Rect selectionRect) {
        var gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;

        // Sceneはreturn
        if (gameObject == null) {
            return;
        }

        var light = gameObject.GetComponent<Light>();

        // ライトじゃなかったらreturn
        if (light == null) {
            return;
        }

        var so = new SerializedObject(light);
        so.Update();

        // ライトの色のプロパティを描画
        selectionRect.xMin += selectionRect.width - 40;
        var colorProp = so.FindProperty("m_Color");
        EditorGUI.PropertyField(selectionRect, colorProp, GUIContent.none);

        so.ApplyModifiedProperties();
        so.Dispose();
    }
}

InitializeOnLoadMethodアトリビュートを付けたメソッドはロード時に呼ばれるので、
Unityを開いたときにコールバックが登録される形になります。

light11.hatenadiary.com

結果

今回は対象のGameObjectLightコンポーネントが貼られていたら
ライトの色をHierarchyから入力できるようにしています。

f:id:halya_11:20190206000515p:plain

参考

editor script that demonstrates how to customize hierarchy window · GitHub