自定义Property Attribute
一、前言
unity 本身自带很多的attribute, 如,Rang, Min,AttributeUsage,Header,ToolTip 等。但是开发过程中往往需要程序根据工程需要或者个人喜好去做一些自定义的attribute。比如,想要对某些属性加颜色突出显示,又或者突然间嫌弃Rang的滑条模式等。
二、Property Attribute书写格式
unity自定义attribute继承于UnityEngine.PropertyAttribute类,如下图:
- AttributeUsage: C#脚本自带的attribute, .net官网AttributeUsage介绍;
- MRang: 自定义的attribute,它继承了PropertyAttribute类;
- public readonly int min: 变量 min, 自定义attribute下边界;
- public readonly int max: 变量 max, 自定义attribute上边界;
三、自定义Property Attribute的使用
如上图,我们期望把m_walkanble这个变量限制在 [0,100] 这个区间内。
到这里,其实我们已经完成了对MRang的使用,但是在Unity编辑器中我们会发现压根没效果。具体原因是,在上诉步骤中我们实际上只进行了约束的设置和存储。
四、自定义Property Attribute约束的实现Property Drawer
为了实现MRang对变量m_walkanble的实际约束。我们需要创建一个新的脚本,它继承于UnityEditor.PropertyDrawer这个类,这个新的脚本负责约束的具体实现。这个脚本一定要放在Editor目录下
- CustomPropertyDrawer: Unity自带attribute,在此处指定要处理的MRang,Unity官网CustomPropertyDrawer介绍;
- MRangeDrawer: 负责处理Inspector面板内被MRang修饰的变量;
- PropertyDrawer: Unity官网PropertyDrawer介绍;
在这个脚本里, 我们重写了OnGUI这个方法,在这个方法里我们获取了之前设置的边界参数min和max以及当前的变量数值property.intValue,我们用Mathf.Clamp对property.intValue进行了裁剪并将结果覆盖原来的值。
五、其他
- 自定义变量增添名称展示
最后的编辑器Inspector面板结果: