エディター拡張
Property Drawer

エディターウィンドウ

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

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

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

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

EditorWindow からの派生

エディターウィンドウを作成するには、スクリプトが “Editor” という名前のフォルダー内にある必要があります。このスクリプト中で、EditorWindow から派生するクラスを作成してください。その後、インナー OnGUI 関数内で GUI 制御を書いてください。

//JS Example

class MyWindow extends EditorWindow {
    function OnGUI () {
        // The actual window code goes here
    }
}


//C# Example

using UnityEngine;
using UnityEditor;
using System.Collections;

public class Example : EditorWindow

    {
        void OnGUI () {
            // The actual window code goes here
           }
    }

MyWindow.js - プロジェクト内の ‘Editor’ という名前のフォルダーに入っています。

ウィンドウの表示

ウィンドウを画面上に表示させるには、それを表示させるメニューアイテムを作成します。これは、MenuItem プロパティーによって起動される関数を作成することで行えます。 MenuItem プロパティ

Unity のデフォルトでは、ウィンドウが再使用されるようになっています。(したがってメニューアイテムを再選択すると既存のウィンドウが表示されます。)これは、関数 EditorWindow.GetWindow を使用して行われます。例:

//JS Example

class MyWindow extends EditorWindow {
    @MenuItem ("Window/My Window")
    static function ShowWindow () {
        EditorWindow.GetWindow (MyWindow);
    }

    function OnGUI () {
        // The actual window code goes here
    }
}
//C# Example

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 を使用できます。

ウィンドウの GUI の実装

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

以下の C# コードでは、GUI 要素をカスタムの EditorWindow に追加しています。

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

エディター拡張
Property Drawer