ノート: UI Toolkit を使用して Unity エディター を拡張することを強くお勧めします。UI Toolkit は IMGUI よりも新しく柔軟でスケーラブルなソリューションを提供します。
アプリケーション内でカスタムウィンドウをいくつでも作ることができます。カスタムウィンドウも Inspector や、Scene、その他のビルトインウィンドウと同じように機能します。カスタムウィンドウは、ゲームのサブシステムにユーザーインターフェースを追加するのにぴったりの方法です。
カスタムウィンドウの作成は、以下の手順で簡単に行えます。
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example : EditorWindow
{
void OnGUI () {
// The actual window code goes here
}
}
MyWindow.cs - プロジェクト内の ‘Editor’ という名前のフォルダーに入っています。
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 を使用します。
ウィンドウの実際のコンテンツは、OnGUI 関数を実装することでレンダリングされます。ゲーム内 GUI (GUI と GUILayout) に使用するのと同じ UnityGUI クラスを使用できます。また、エディター専用クラス EditorGUI と EditorGUILayout には追加の 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 ();
}
}
この結果、以下のようなウィンドウができ上がります。
詳細は、EditorWindow ページ で例とドキュメントを参照してください。