アプリ内でカスタムウィンドウをいくつでも作ることができます。カスタムウィンドウも Inspector(インスペクター)や Scene(シーン)その他のビルトインウィンドウと同じように機能します。カスタムウィンドウは、ゲームのサブシステムにユーザーインターフェースを追加するのにぴったりの方法です。
カスタムのエディターウィンドウの作成は、以下のステップにより簡単に行えます。
エディターウィンドウを作成するには、スクリプトが “Editor” という名前のフォルダー内にある必要があります。このスクリプト中で、EditorWindow から派生するクラスを作成してください。その後、インナー OnGUI 関数内で GUI 制御を書いてください。
//JS の例
class MyWindow extends EditorWindow {
function OnGUI () {
// 実際の window コードをここに記入
}
}
//C# の例
using UnityEngine;
using UnityEditor;
using System.Collections;
public class Example : EditorWindow
{
void OnGUI () {
// 実際の window コードをここに記入
}
}
MyWindow.js - プロジェクト内の ‘Editor’ という名前のフォルダーに入っています。
ウィンドウを画面上に表示するには、それを表示するメニュー項目を作成します。これを行うには、MenuItem プロパティーによって呼び出される関数を作成します。
Unity のデフォルトでは、ウィンドウが再使用されるようになっています。(したがってメニューアイテムを再選択すると既存のウィンドウが表示されます。)これは、関数 EditorWindow.GetWindow を使用して行われます。例:
//JS の例
class MyWindow extends EditorWindow {
@MenuItem ("Window/My Window")
static function ShowWindow () {
EditorWindow.GetWindow (MyWindow);
}
function OnGUI () {
// 実際の window コードをここに記入
}
}
//C# の例
using UnityEngine;
using UnityEditor;
using System.Collections;
class MyWindow : EditorWindow {
[MenuItem ("Window/My Window")]
public static void ShowWindow () {
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI () {
// 実際の window コードをここに記入
}
}
MyWindow の表示
これにより、ドック可能な標準のエディターウィンドウがひとつ作成されます。このウィンドウの位置は次の起動時まで保存され、またカスタムレイアウト中で使用することができます。作成される内容をより具体的に設定したい場合は、GetWindowWithRect を使用できます。
ウィンドウのコンテンツは、OnGUI 関数を実装することによってレンダリングされます。インゲーム GUI ( GUI と GUILayout ) に使用するものと同じ UnityGUI クラスを使用できます。Unity はこの他にもいくつかの GUI 制御を提供しています。これらはエディターオンリーのクラス EditorGUI と EditorGUILayout に入っています。これらのクラスは、すでに通常のクラスで使用可能な制御に対して追加されたものですので、自由に組み合わせることができます。
以下の C# コードでは、GUI 要素をカスタムの EditorWindow に追加しています。
//C# の例
using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow
{
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f;
// "My Window" という名のメニューアイテムをWindow メニューに加えます
[MenuItem("Window/My Window")]
public static void ShowWindow()
{
//既存の window インスタンスを表示。もしなければ、作ります。
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 (エディターウィンドウ)に関するページを参照してください。