描述
虽然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仓库中查看。
网友评论