Version: 5.4
エディター拡張
Property Drawer

エディターウィンドウ

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

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

カスタムのエディターウィンドウの作成は、以下のステップにより簡単に行えます。

  • EditorWindow から派生するスクリプトを作成します。
  • コードを使用してウィンドウの表示をトリガーします。
  • ツールのための GUI コードを実装します。

EditorWindow からの派生

エディターウィンドウを作成するには、スクリプトが “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 を使用できます。

ウィンドウの GUI の実装

ウィンドウのコンテンツは、OnGUI 関数を実装することによってレンダリングされます。インゲーム GUI ( GUIGUILayout ) に使用するものと同じ UnityGUI クラスを使用できます。Unity はこの他にもいくつかの GUI 制御を提供しています。これらはエディターオンリーのクラス EditorGUIEditorGUILayout に入っています。これらのクラスは、すでに通常のクラスで使用可能な制御に対して追加されたものですので、自由に組み合わせることができます。

以下の 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 (エディターウィンドウ)に関するページを参照してください。

エディター拡張
Property Drawer