美文网首页
编辑器扩展基础4——自定义Attribute

编辑器扩展基础4——自定义Attribute

作者: JervieQin | 来源:发表于2019-02-19 23:17 被阅读0次

    描述

    虽然unity为我们准备了很多Attribute(官方文档UnityEnginee/UnityEditor下的Attribute可查看)来供我们修改组件面板的UI,但是有的时候我们想自定义一个外观,这时候我们就能够通过自定义Attribute来个性化。

    查阅官方API描述

    那么打开api手册我们能够发现如果要自定义属性,那么,我们的属性必须继承自PropertyAttribute,然后与PropertyDrawer连用,以达到自定义属性在Inspector面板上的显示方式。先了解完自定义属性然后,我们再具体看看自定义属性绘制器怎么工作的。前文:自定义PorpertyDrawer

    案例

    区别于系统自带的[Range],我们自定义一个[RangeAttribute]。
    步骤和之前的序列化类差不多。

    • 实现一个自定义的属性类继承自PropertyAttribute
    • 实现对应的PropertyDrawer并保存在Editor目录下
    • 组件中调用
    public class LabelAttribute : PropertyAttribute
    {
        public string label;
        public LabelAttribute(string label)
        {
            this.label = label;
        }
    }
    
    using UnityEngine;
    using UnityEditor;
    using System;
    
    [CustomPropertyDrawer(typeof(LabelAttribute),false)]
    public class LabelDrawer : PropertyDrawer
    {
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            label.text = (attribute as LabelAttribute).label;
            EditorGUI.PropertyField(position, property, label);
        }
    }
    
    public class Chinese : MonoBehaviour {
             [LabelAttribute ("中文属性名")]//修改的Property的名字,即原来Inspector中显示的“TestInt”变成了“中文属性名”
            public int testInt;
        
            [Header("中文")]  //内置的Header标签只是在Property上方添加了label,注意和上面的区别
            public string Name;
    }
    
    效果

    接着讲CustomPropertyDrawer的另一种:DecoratorDrawer

    注:配套案例可在EditorExtensionDemo仓库中查看。

    相关文章

      网友评论

          本文标题:编辑器扩展基础4——自定义Attribute

          本文链接:https://www.haomeiwen.com/subject/ergnpftx.html