なごるふ

UnityとかArduinoとか気になったことを

【Unity】Unity標準のコンポーネントやアセットのInspectorを拡張する

Unityで開発をしていると、TransformやAnimationClipなど、Unity標準のコンポーネントやアセットのInspectorを拡張したくなることがあります。

完全に自作してしまえば問題ないのですが、既存の機能はそのままに機能を追加したい場合に、標準のInspector拡張がInternalで隠蔽されているため、継承して追加実装するみたいなことが出来ません。

そのため、既存のInspector拡張より優先されるように新規のInspector拡張を作成して、標準のInspectorGUIをリフレクションを使ってCreateEditorから呼び出すようにします。

既存のInspector拡張より優先させるには、ファイル名を同名にするか_から始まるようなソートで優先度が高くなる名前にします。

コード

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Transform))]
public class TransformInspector : Editor
{
    public override void OnInspectorGUI()
    {
        // デフォルトInspector拡張のTypeを取得.
        var type = typeof(EditorApplication).Assembly.GetType("UnityEditor.TransformInspector");
        if (type == null)
        {
            return;
        }

        // デフォルトInspector拡張を作成してGUIを表示.
        var editor = CreateEditor(target, type);
        editor?.OnInspectorGUI();

        /* 以下拡張機能を実装 */

        EditorGUILayout.LabelField("拡張ほげほげ");
    }
}

ちなみに標準のInspector拡張のクラス名がわからない場合は、UnityCsReferenceで探すと見つかります。

コンポーネント名+Inspectorアセット名+Editorなどで検索すれば出てきます。

参考

baba-s.hatenablog.com

hacchi-man.hatenablog.com