前言
对于一个继承于MonoBehaviour的脚本组件来讲,它的字段是可以在Inspector面板中显示,但是通过对Inspector的扩展,可以为自定义组件创建自定义检视面板和编辑器,例如修改字段显示的样式,以及该字段是否显示等操作
具体脚本
创建组件脚本,继承自MonoBehaviour:
public class Test : MonoBehaviour
{
public int a;
public string b;
}
创建对应的编辑器脚本,继承自Editor,并添加CustomEditor属性将编辑器附加到自定义组件:
[CustomEditor(typeof(Test))] //CustomEditor属性用于指定该编辑器附加到那个自定义组件上
[CanEditMultipleObjects] //CanEditMultipleObjects属性用于编辑器能够支持多对象属性显示(多对象操作时应当使用SerializedObject和SerializedProperty系统)
public class TestEditor : Editor
{
SerializedProperty a;
SerializedProperty b;
void OnEnable()
{
a = serializedObject.FindProperty("a");
b = serializedObject.FindProperty("b");
}
//通过重写OnInspectorGUI方法可以修改该组件在检视面板的具体显示
//这里使用SerializedObject和SerializedProperty系统,可以对多对象同时处理
public override void OnInspectorGUI()
{
//base.OnInspectorGUI();
serializedObject.Update(); //固定结构
EditorGUILayout.PropertyField(a, new GUIContent("这是一个Int值"));
EditorGUILayout.PropertyField(b, new GUIContent("这是一个String值"));
serializedObject.ApplyModifiedProperties(); //固定结构
}
//如果不需要对多对象的同时处理,则可以通过target的方式直接数值进行操作
public override void OnInspectorGUI()
{
var test = (Test)target;//当前选择的对象
test.a = EditorGUILayout.IntField("这是一个Int值", test.a);
test.b = EditorGUILayout.TextField("这是一个String值", test.b);
}
}
官方案例
https://docs.unity.cn/cn/2019.4/ScriptReference/Editor.html
本文介绍了如何在Unity中为自定义组件创建自定义编辑器,通过继承Editor类和使用CustomEditor属性,可以修改组件在Inspector面板的显示方式,包括字段样式和显示与否。示例代码展示了如何处理单个对象和多个对象的属性编辑,并提供了官方文档链接作为参考。
6万+

被折叠的 条评论
为什么被折叠?



