【Unity】【エディタ拡張】シーンビューにウィンドウを表示する

シーンビューにIMGUIのウィンドウを表示する方法です。

ソースコード

using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
using UnityEditor.SceneManagement;

public class SampleSceneEditWindow {

    private static Rect _windowSize = new Rect(8, 24, 300, 100);
    private static bool _enabled = false;
    
    // スクリプトロード時に呼ばれる
    [InitializeOnLoadMethod]
    private static void SampleSceneEdit(){
        SceneView.onSceneGUIDelegate += OnSceneGUI;

        // シーン切り替え時にenabledを切り替える
        System.Func<Scene, bool> getEnabled = scene => scene.name.Contains("sample_");
        EditorSceneManager.sceneOpened += (scene, mode) => _enabled = getEnabled(scene);
        EditorApplication.delayCall += () => _enabled = getEnabled(EditorSceneManager.GetActiveScene());
    }
    
    private static void OnSceneGUI(SceneView sceneView){
        if (!_enabled) {
            return;
        }
        GUILayout.Window(1, _windowSize, DrawWindow, "Sample Window");
    }
    
    public static void DrawWindow(int id)
    {
        EditorGUILayout.LabelField("Sample");
    }
}

説明はコメントを見てください

結果

f:id:halya_11:20180525155801p:plain

このようにウィンドウを表示できます。