基础字段特性
Range
用于限制输入指定区间的数值
[Range(0f,1f)]
public float FloatValue;
[Range(1, 10)]
public int IntValue;
Tooltip
鼠标放在属性上,显示当前属性的描述信息
[Tooltip("用于设置角色的姓名")]
public string RoleName = "英雄";
ContextMenuItem
可以对当前属性追加一个右键菜单,并执行指定的函数。
[ContextMenuItem("打开网页","OpenWeb")]
public string WebUrl = "http://www.baidu.com";
private void OpenWeb()
{
Application.OpenURL(WebUrl);
}
Header
在属性上面增加Header信息
[Header("角色等级")]
public int Level = 5;
MultilineAttribute
用于字符串类型字段,在多行文本区域中显示。
[Multiline(5)]
public string RoleDes = "";
SerializeField
序列化私有字段
[SerializeField]
private int CurrentHp = 5;
Space
在字段中间增加空位
[Space(20)]
TextArea
将String类型字段描述为一个文字输入框,可以设置最小显示行数和最大显示行数。
[TextArea(1,6)]
public string RoleLogs = "";
FormerlySerializedAs
当我们用新的字段替换老的字段值时,可以使用这个特性让其默认使用被替换的字段值。防止字段值丢失。
public int oldValue = 6;
[FormerlySerializedAs("oldValue")]
public int newValue = 8;
Obsolete
用于描述已经过时的API的警告或者错误。
[Obsolete("此Api已经过时",true)]
public int BuffCount = 5;
private void Awake()
{
Debug.Log(this.BuffCount);
}
HideInInspector
在属性面板隐藏这个字段
[HideInInspector]
public int RoleMp = 20;
ColorUsage
设置颜色字段编辑样式
[ColorUsage(false,true)]
public Color SkinColor = Color.white;
NonSerialized
不对当前字段进行序列化
[NonSerialized]
public string RoleSkillIds;
【进阶】自定义字段特性
FileName
定义一个属性特性用于将字段名在Unity属性面板显示我们需要显示的名字。
1.创建一个字段特性并为其制作绘制类
特性脚本
/// <summary>
/// 创建一个属性特性
/// </summary>
[AttributeUsage(AttributeTargets.Field)]
public class FieldName : PropertyAttribute
{
/// <summary>
/// 用于存储属性替代的名称
/// </summary>
public string name;
public FieldName(string name)
{
this.name = name;
}
}
特性绘制脚本 ,脚本为Unity Editor脚本。
/// <summary>
/// 为FieldName特性制作一个绘制类
/// </summary>
[CustomPropertyDrawer(typeof(FieldName))]
public class FieldNameDrawer : PropertyDrawer
{
/// <summary>
/// 绘制属性
/// </summary>
/// <param name="position">绘制位置</param>
/// <param name="property">属性对象</param>
/// <param name="label">标签</param>
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
FieldName range = attribute as FieldName;
label.text = range.name;
EditorGUI.PropertyField(position, property, label);
}
}
2.使用特性
[FieldName("角色描述")]
[Multiline(5)]
public string RoleDes = "";
3.绘制效果