Unity编辑器扩展入门篇 - Unity Inspector自定义脚本菜单
前言
在开发中,我们时常也需要在自定义脚本的菜单来方便调试和测试,例如给脚本上的变量添加一个描述文本来进行说明其作用,方便协作的开发人员明了其含义。又或者在脚本上添加一个按钮来打印某些参数或者变量的值,方便在调试时进行排查。
创建一个自定义脚本的Inspector UI界面
脚本及覆写脚本界面的类
首先创建一个基础的脚本,命名为SimpleScriptTool,里面包含一个int型的变量_testValue,代码如下。
public class SimpleScriptTool : MonoBehaviour
{[SerializeField] private int _testValue;
}创建一个复写脚本Inspector UI界面的脚本,命名为SimpleScriptToolEditor,这个脚本需要继承Editor类,用来覆写它的Inspector UI界面。
[CustomEditor(typeof(SimpleScriptTool))]
public class SimpleScriptToolEditor : Editor
{//添加覆写Inspector UI的代码
}为了可以访问SimpleScriptTool里面的变量,我们需要用到SerializedProperty这个类,去读取我们需要访问的_testValue这个变量。
private SerializedProperty _testValue;private void OnEnable()
{_testValue = serializedObject.FindProperty("_testValue");
}通过已有的serializedObject变量去找到_testValue的这个变量,并获取它的值。
脚本自定义界面
要覆写脚本的Inspector UI界面,关键的是需要覆写OnInspectorGUI这个方法。我们可以通过覆写这个方法,并且自己去做一些界面组件绘制来自定义。
 
可以添加一个简单的文本描述来说明我们的_testValue是用来做什么的,然后可以添加一个按钮来打印_testValue的值并输出到控制台显示,代码如下。
public override void OnInspectorGUI()
{serializedObject.Update();EditorGUILayout.LabelField("This is a test value.");EditorGUILayout.Space();EditorGUILayout.PropertyField(_testValue);if (GUILayout.Button("Debug Test Value")){Debug.Log($"Test Value = {_testValue.intValue}");}serializedObject.ApplyModifiedProperties();
}LabelField对应的是文本描述,Space是指上下UI组件有个空格的距离,GUILayout.Button即绘制一个按钮,括号内表示要执行的逻辑。当我们点击Debug Test Value按钮时,控制台就会输出_testValue的值。
 
