【Unity】【UI Toolkit】EditorWindowにInspectorをそのまま表示する方法

UnityのUI Toolkitで、EditorWindowにInspectorを表示する方法についてまとめました。

Unity2021.3.16f1

やりたいこと

HierarchyからGameObjectを選択すると、そのGameObjectにアタッチされているコンポーネントがInspectorウィンドウに表示されます。

Inspector

本記事では、UI Toolkitを使ってこのInspectorを自分で作ったEditorWindow上に表示して編集できるようにする方法についてまとめます。

実装

これを実装するにはInspectorElementクラスに対象のコンポーネントを渡し、このInspectorElementを親のUI要素にAddするだけです。

以下は選択中のオブジェクトにCameraコンポーネントがアタッチされていたらそのInspectorEditorWindowに表示する例です。

using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;

public sealed class InspectorWindow : EditorWindow
{
    public void OnEnable()
    {
        Selection.selectionChanged += OnSelectionChanged;
    }

    [MenuItem("Window/InspectorWindow")]
    private static void ShowDefaultWindow()
    {
        GetWindow<InspectorWindow>();
    }

    private void OnSelectionChanged()
    {
        var component = Selection.activeGameObject?.GetComponent<Camera>();
        if (component == null)
            return;

        rootVisualElement.Clear();
        var inspector = new InspectorElement(component);
        rootVisualElement.Add(inspector);
    }
}

結果

Window > InspectorWindowからこのウィンドウを開いてCameraを選択すると以下のようにInspectorの内容が表示されることを確認できます。

Inspector

参考

docs.unity3d.com

docs.unity3d.com