夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

UnityEditor拡張でエディタウィンドウにゲームオブジェクトをアタッチするフィールドを定義する

本日はUnity枠です。

UnityEditor拡張について学んだことがあるので記事にします。

〇環境

・Windows11PC

・Unity2022.3.26f1

〇UnityEditorWindowの実装

Unityのエディタ拡張でウィンドウを表示するには次のようなコードを実行します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

    public class OpenWindow : Editor
    {
        [MenuItem("Window/MeshToChangeWireframe")]
        static void GameControlMenu()
        {
            EditorWindow.GetWindow<ObjectChangeWireframe>("ObjectChangeWireFrame");

        }
    }
    public class ObjectChangeWireframe : EditorWindow
    {
        public GameObject obj;
        void OnGUI()
        {
           
        }
    }
    
}

これによって上部メニューにコマンドが出現し、選択することでウィンドウが開きます。

〇GameObjectをアタッチするフィールドを定義する

次にゲームオブジェクトをアタッチできるフィールドを定義します。

コードは次のようになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

namespace HoloMoto.Utils
{
    public class OpenWindow : Editor
    {
        [MenuItem("Window/MeshToChangeWireframe")]
        static void GameControlMenu()
        {
            EditorWindow.GetWindow<ObjectChangeWireframe>("ObjectChangeWireFrame");

        }

    }
    public class ObjectChangeWireframe : EditorWindow
    {

        public GameObject obj;
        void OnGUI()
        {
            //meshオブジェクトをアタッチするGUI
            GUILayout.Label("Mesh Object", EditorStyles.boldLabel);//ラベルの定義
            obj = (GameObject)EditorGUILayout.ObjectField("Mesh Object", obj, typeof(GameObject), true);//フィールドの定義
            
        }
   }
}

このコードをコンパイルしUnityでエディタウィンドウを立ち上げると次のようにGameObject型のオブジェクトをアタッチするフィールドが定義されます。

以上でUnityEditor拡張でエディタウィンドウにゲームオブジェクトをアタッチするフィールドを定義することができました。

あとはコード内で例えばボタンが押された時など任意のタイミングでobjに対して処理を加えることができます。