Version: Unity 6.0 (6000.0)
言語 : 日本語
IMGUI でエディターを拡張する
IMGUI で Property Drawer を使用して Inspector をカスタマイズする

IMGUI を使用してカスタム Editor ウィンドウを作成する

ノート: UI Toolkit を使用して Unity エディター を拡張することを強くお勧めします。UI Toolkit は IMGUI よりも新しく柔軟でスケーラブルなソリューションを提供します。

アプリケーション内でカスタムウィンドウをいくつでも作ることができます。カスタムウィンドウも Inspector や、Scene、その他のビルトインウィンドウと同じように機能します。カスタムウィンドウは、ゲームのサブシステムにユーザーインターフェースを追加するのにぴったりの方法です。

カットシーンアクションのスクリプティングに使用される、Serious Games Interactive による Custom Editor Interface
カットシーンアクションのスクリプティングに使用される、Serious Games Interactive による Custom Editor Interface

カスタムウィンドウの作成は、以下の手順で簡単に行えます。

  • EditorWindow を継承するスクリプトを作成します。
  • コードを使用してウィンドウを呼び出し表示します。
  • ツールのための GUI コードを実装します。

EditorWindow の継承 Editor ウィンドウを作成するには、スクリプトが “Editor” という名前のフォルダー内にある必要があります。このスクリプト中で、EditorWindow を継承するクラスを作成します。その後、OnGUI 関数内に GUI コントロールを記述します。

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example : EditorWindow

    {
        void OnGUI () {
            // The actual window code goes here
           }
    }

MyWindow.cs - プロジェクト内の ‘Editor’ という名前のフォルダーに入っています。

ウィンドウの表示 ウィンドウを画面上に表示するには、表示するメニューアイテムを作成します。それには、MenuItem プロパティによってアクティベートされる関数を作成します。

Unity のデフォルト動作では、ウィンドウはリサイクルされるため、メニューアイテムを再度選択すると、既存のウィンドウが表示されます。これには、EditorWindow.GetWindow 関数を以下のように使用します。

using UnityEngine;
using UnityEditor;
using System.Collections;

class MyWindow : EditorWindow {
    [MenuItem ("Window/My Window")]

    public static void  ShowWindow () {
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI () {
        // The actual window code goes here
    }
}

MyWindow の表示

これにより、ドック可能な標準のエディターウィンドウが作成されます。このウィンドウの位置は次の起動時まで保存され、カスタムレイアウトで使用することができます。作成する内容をより具体的に設定したい場合は、GetWindowWithRect を使用します。

ウィンドウの GUI の実装

ウィンドウの実際のコンテンツは、OnGUI 関数を実装することでレンダリングされます。ゲーム内 GUI (GUIGUILayout) に使用するのと同じ UnityGUI クラスを使用できます。また、エディター専用クラス EditorGUIEditorGUILayout には追加の GUI コントロールもあります。通常のクラスで使用できるコントロールにこれらのクラスを追加して、自由に組み合わせてマッチさせることができます。

以下の C# コードでは、GUI 要素をカスタムの EditorWindow に追加しています。

using UnityEditor;
using UnityEngine;

public class MyWindow : EditorWindow
{
    string myString = "Hello World";
    bool groupEnabled;
    bool myBool = true;
    float myFloat = 1.23f;
    
    // Add menu item named "My Window" to the Window menu
    [MenuItem("Window/My Window")]
    public static void ShowWindow()
    {
        //Show existing window instance. If one doesn't exist, make one.
        EditorWindow.GetWindow(typeof(MyWindow));
    }
    
    void OnGUI()
    {
        GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
        myString = EditorGUILayout.TextField ("Text Field", myString);
        
        groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
            myBool = EditorGUILayout.Toggle ("Toggle", myBool);
            myFloat = EditorGUILayout.Slider ("Slider", myFloat, -3, 3);
        EditorGUILayout.EndToggleGroup ();
    }
}

この結果、以下のようなウィンドウができ上がります。

提供された例を使用して作成されたカスタム Editor ウィンドウ。
提供された例を使用して作成されたカスタム Editor ウィンドウ。

詳細は、EditorWindow ページ で例とドキュメントを参照してください。

IMGUI でエディターを拡張する
IMGUI で Property Drawer を使用して Inspector をカスタマイズする