unity编辑器扩展~Inspector扩展

本文介绍了如何在Unity中为自定义组件创建自定义编辑器,通过继承Editor类和使用CustomEditor属性,可以修改组件在Inspector面板的显示方式,包括字段样式和显示与否。示例代码展示了如何处理单个对象和多个对象的属性编辑,并提供了官方文档链接作为参考。

前言

对于一个继承于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值