Note: Unity エディター を拡張するには、UI Toolkit を使用することを強く推奨します。UI Toolkit は、IMGUI よりも最新の機能で、柔軟性があり、スケーラブルなソリューションを提供するからです。
アプリケーション内でカスタムウィンドウをいくつでも作ることができます。カスタムウィンドウもインスペクター、シーン、その他のビルトインウィンドウと同じように機能します。カスタムウィンドウは、ゲームのサブシステムにユーザーインターフェースを追加するのにぴったりの方法です。
カスタムウィンドウの作成は、以下の手順で簡単に行えます。
Editor Window を作成するには、スクリプトが “Editor” という名前のフォルダー内にある必要があります。このスクリプト中で、EditorWindow を継承するクラスを作成してください。その後、OnGUI 関数内で GUI 制御を書いてください。
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example : EditorWindow
{
void OnGUI () {
// 実際のウィンドウのコードはここに書きます
}
}
MyWindow.cs - placed in a folder called ‘Editor’ within your project.
ウィンドウを画面上に表示するには、それを表示するメニュー項目を作成します。これを行うには、MenuItem プロパティによって呼び出される関数を作成します。
The default behavior in Unity is to recycle windows, so selecting the menu item again would show existing windows. This is done by using the function EditorWindow.GetWindow Like this:
using UnityEngine;
using UnityEditor;
using System.Collections;
class MyWindow : EditorWindow {
[MenuItem ("Window/My Window")]
public static void ShowWindow () {
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI () {
// 実際のウィンドウのコードはここに書きます
}
}
MyWindow の表示
これにより、ドック可能な標準のエディターウィンドウがひとつ作成されます。このウィンドウの位置は次の起動時まで保存され、またカスタムレイアウト中で使用することができます。作成する内容をより具体的に設定したい場合は、GetWindowWithRect を使用できます。
ウィンドウのコンテンツは、OnGUI 関数を実装することによってレンダリングされます。インゲーム GUI ( GUI と GUILayout ) に使用するものと同じ UnityGUI クラスを使用できます。Unity はこの他にもいくつかの GUI 制御を提供しています。これらはエディターでのみ動作する EditorGUI と EditorGUILayout クラスに入っています。これらのクラスは、すでに通常のクラスで使用可能な制御に対して追加されたものなので、自由に組み合わせることができます。
以下の C# コードでは、GUI 要素をカスタムの EditorWindow に追加しています。
using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow
{
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f;
// Window メニューに "My Window" というメニュー項目を追加
[MenuItem("Window/My Window")]
public static void ShowWindow()
{
//既存のウィンドウのインスタンスを表示。ない場合は作成します。
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 ();
}
}
この結果、以下のようなウィンドウができ上がります。
詳しくは、EditorWindow (エディターウィンドウ)に関するページを参照してください。