Unity3D 字段特性

本文详细介绍了Unity中的一些常用属性装饰器,如Range、Tooltip、ContextMenuItem等,以及如何创建自定义字段特性,通过示例展示了如何实现一个名为FieldName的特性来改变属性显示名称。这些特性极大地丰富了Unity编辑器中的交互体验,提高了代码的可读性和易用性。
摘要由CSDN通过智能技术生成

基础字段特性

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.绘制效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值