MRが楽しい

MRやVRについて学習したことを書き残す

Unityで自作のエディターウィンドウを作成する

本日は Unity の小ネタ枠です。
Unityで自作のエディターウィンドウを作成する方法です。

EditorWindow

EditorWindow クラスを使うことで新しいエディターウィンドウを定義できます。
docs.unity3d.com

using UnityEditor;
using UnityEngine;

public class SampleEditorWindow : EditorWindow
{
    private string userId = string.Empty;
    private string password = string.Empty;
    
    /// <summary>
    /// メニューから Window -> SampleEditorWindow を選択してカスタムウィンドウを開く
    /// </summary>
    [MenuItem("Window/SampleEditorWindow")]
    private static void Open()
    {
        SampleEditorWindow window = (SampleEditorWindow)GetWindow<SampleEditorWindow>("SampleEditorWindow");
        window.Show();
    }
    
    /// <summary>
    /// OnGUI はウィンドウへの操作が行われると呼び出されます
    /// </summary>
    private void OnGUI()
    {
        // ウィンドウのレイアウトと実行処理
    }
}

サンプルスクリプト

以下のユーザIDとパスワードを入力してログイン処理を行うようなカスタムウィンドウを作成しました。
・SampleEditorWindow.cs

using UnityEditor;
using UnityEngine;

public class SampleEditorWindow : EditorWindow
{
    private string userId = string.Empty;
    private string password = string.Empty;
    
    /// <summary>
    /// メニューから Window -> SampleEditorWindow を選択してカスタムウィンドウを開く
    /// </summary>
    [MenuItem("Window/SampleEditorWindow")]
    private static void Open()
    {
        SampleEditorWindow window = (SampleEditorWindow)GetWindow<SampleEditorWindow>("SampleEditorWindow");
        window.Show();
    }
    
    /// <summary>
    /// OnGUI は入力変更またはボタン押下が行われると呼び出されます
    /// </summary>
    private void OnGUI()
    {
        EditorGUILayout.LabelField("SampleEditorWindow");
        EditorGUILayout.Space();
        
        // ユーザIDのテキストフィールドの表示と値の取得
        EditorGUILayout.LabelField("UserId");
        userId = EditorGUILayout.TextField(userId);
        
        // パスワードのテキストフィールドの表示と値の取得
        EditorGUILayout.LabelField("Password");
        password = EditorGUILayout.PasswordField(password);
        
        EditorGUILayout.Space();
        
        // ログインボタン押下時にログイン処理(ログ表示)を実行
        if (GUILayout.Button("Login"))
        {
            Debug.Log($"Login : userId = {userId}, password = {password}");
        }
    }
}

スクリプトがプロジェクト内にあると、メニューに[Window -> SampleEditorWindow]が追加されます。
ウィンドウは OnGUI で定義した通りに動作します。