本日は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に対して処理を加えることができます。