興味の源泉

自分が興味を起こせるようなネタを雑多に書き綴るブログ

【Unity】EditorWindow超入門

Unityはメニューからウィンドウを開いて、色々できるウィンドウを作成することができます。

さわり部分だけですが紹介します。


まずはEditorフォルダの下にEditorWindow用のクラスを作成します。

f:id:nanami_yamato:20200123234053p:plain


ソースコードは以下のように記述すると

using UnityEngine;
using UnityEditor;
public class EditorWindowTest1 : EditorWindow
{
    [MenuItem("Tests/テストツール/Test1")]
    private static void Create()
    {
        GetWindow<EditorWindowTest1>("テストウィンドウ");
    }
}

メニューに追加されます。

f:id:nanami_yamato:20200123234456p:plain

メニューから選択するとウィンドウが開きます。

まだウィンドウ内について何も記述していないので空のウィンドウが表示されます。

f:id:nanami_yamato:20200123234728p:plain


基本の基本として、「ラベル」、「テキストボックス」、「ボタン」を配置したいと思います。

まずは全て置いたソースコードと実行結果を張ります。

using UnityEngine;
using UnityEditor;

public class EditorWindowTest1 : EditorWindow
{
    /// <summary>テキストボックスの編集用文字列</summary>
    private string textBox1 = string.Empty;

    /// <summary>ラベル用文字列</summary>
    private string label2 = "ラベル2";

    [MenuItem("Tests/テストツール/Test1")]
    private static void Create()
    {
        GetWindow<EditorWindowTest1>("テストウィンドウ");
    }
        
    private void OnGUI()
    {
        // ラベル
        GUILayout.Label("ラベル");

        // テキストボックス
        textBox1 = GUILayout.TextField(textBox1);

        // ボタン
        if (GUILayout.Button("ボタン"))
        {
            label2 = "ボタン押された。 Text:" + textBox1;
        }

        // ラベル
        GUILayout.Label(label2);
    }
}

f:id:nanami_yamato:20200123235356p:plain


OnGUIで描画時に毎回各パーツは処理されます。

ラベルは以下で表示できます。

GUILayout.Label(”表示したい文字列”);

テキストボックスは編集したものを入れる変数が必要になります。
サンプルのコードだとtextBox1に入っている値をテキストボックスの中に表示し、編集した値を入れなおしています。

textBox1 = GUILayout.TextField(textBox1);

ボタンは押されたときに if 分の中が実行されます。

if (GUILayout.Button("ボタン"))
{
    label2 = "ボタン押された。 Text:" + textBox1;
}

ボタンを押されたら変数label2に設定するので、そのあとのラベル表示で設定した文字を表示しています。


EditorWindowはUnityEditorで実行するツールづくりに最適です。
データを変換かけたり、ファイルを検索して中身を表示・編集して保存など、色々なものを作っていけます。

有効活用していきたいですね。