もう一つのLockされたInspectorを開くエディタ拡張

目的

Unityで作業していとInspectorをもう一つ開きたい時がある。 もう一個開く手順、手動だと手数が多い。インスペクタのタブで右クリック、Add tabを選ぶ。タブが追加されたので見やすいように分離。 そのままだと選択オブジェクトのパラメータが2つのインスペクタに出てしまうので1つをロック状態に。 そもそも2つ開きたい時はだいたいロックをしたい。 なのでインスペクタをもう一つ開いて、ロックするまでを一発ですますエディタ拡張、コードは以下。

コード

ここではLockedInspector.csというソースを適当なEditorフォルダに作っています。

using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
using UnityEditor;

public class LockedInspector : MonoBehaviour
{
    // MenuItemのためのアトリビュート "%l" の部分はホットキー(ショートカット) Ctrl + l で開く(MacはCmd + l)
    [MenuItem("Window/Open Locked Inspector %l")]
    static void LockInspectorAndOpenAnother()
    {
        // InspectorWindowタイプの取得
        var inspectorType = typeof(Editor).Assembly.GetType("UnityEditor.InspectorWindow");
        
        // InspectorWindowのインスタンスを作製し、表示する
        var inspectorInstance = ScriptableObject.CreateInstance(inspectorType) as EditorWindow;
        inspectorInstance.Show();

        // "isLockedプロパティがロックされているか(ウィンドウの鍵マークに対応している)
        var isLocked = inspectorType.GetProperty("isLocked", BindingFlags.Instance | BindingFlags.Public);
        // 作製したインスペクタウィンドウのisLockedをtrueに設定する
        isLocked.GetSetMethod().Invoke(inspectorInstance, new object[] { true });
    }
}

Ctrl + l(える)でロックされた状態のインスペクタウィンドウが独立して開きます。

参考

Editor: multiple Inspectors - Unity Answers