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