本日はUnity枠です。
Unityではスクリプトを記述した際にSerializefieldやPublicを付けた変数がインスペクターウィンドウにパラメータとして表示されます。

今回はこのGUI表示をカスタマイズしていきます。
〇環境
・Windows11PC
・Unity2022.3.26f1
〇UnityEditor拡張
インスペクターウィンドウに表示されるGUIをカスタマイズすることもUnityエディタ拡張と呼ばれます。
今回は以下のスクリプトを使用します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
[SerializeField] int _number = 0;
public bool _isWarldSpace = true;
}
デフォルトの場合インスペクターウィンドウには次のように表示されます。

これをカスタマイズするためにはEditorフォルダを作成し、内部に新たなGUI用のスクリプトを作成します。

スクリプトは次のようになります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Test))]
public class TestGUI : Editor
{
}
CustomEditorアトリビュートを付けることでTestGUIクラスをTest.csに対するエディタをカスタムするためのクラスとして使用します。
これによってインスペクターウィンドウのTest.csの表記がなくなります。

これはカスタムGUIクラスによって上書きされたものの、そのパラメータが定義されていないため何も表示されないのです。
ではGUIを定義します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Test))]
public class TestGUI : Editor
{
public override void OnInspectorGUI()
{
Test myTarget = (Test)target;
myTarget._isWarldSpace = EditorGUILayout.Toggle("Is Warld Space", myTarget._isWarldSpace);
}
}
ここではTest.csの_isWarldSpaceを定義しています。これによってインスペクターウィンドウ上にGUIが表記されます。

またDrawDefaultInspector()を使用することでカスタム元のTest.csのパラメータが一挙に表示されます。
public class TestGUI : Editor
{
public override void OnInspectorGUI()
{
Test myTarget = (Test)target;
// myTarget._isWarldSpace = EditorGUILayout.Toggle("Is Warld Space", myTarget._isWarldSpace);
DrawDefaultInspector();
}
}
例えば次のように定義することで
public class TestGUI : Editor
{
public override void OnInspectorGUI()
{
Test myTarget = (Test)target;
// myTarget._isWarldSpace = EditorGUILayout.Toggle("Is Warld Space", myTarget._isWarldSpace);
DrawDefaultInspector();
DrawDefaultInspector();
}
}
このように2回にして表記することができます。

特に意味がない実装ではありますが。
用途としてはEnum型やBool値でモード切替などを行う実装において必要な時に必要なパラーメータを表記させ、不要なパラメータを非表示にするといった使用方法があります。
本日はGUIの定義を行いました。本日は以上です。