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

エディターウィンドウ

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

カットシーンアクションのスクリプティングに使用される、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