Unity最全 Attribute特性 总结(建议收藏)

整理一些常用的Unity Attribute。

Unity提供两类Attribute:

  1. UnityEngine: 主要作用于Inspector面板,参阅文档 AddComponentMenu 及其同级页面。

  1. UnityEditor: 主要作用于Unity编辑器(例如菜单),参阅文档 CallbackOrderAttribute 及其同级页面。

1. UnityEngine常用Attribute

AddComponentMenu: 作用于脚本中的类,可在“Component”菜单中的任意位置放置脚本,而不仅是“Component > Scripts”菜单。

DisallowMultipleComponent: 作用于脚本中的类,指定类(及其子类)不能多次添加到GameObject。

RequireComponent: 作用于脚本中的类,添加到GameObject时自动添加依赖项。

ExecuteAlways: 作用于脚本中的类,使脚本实例在编辑时也能执行。

ExecuteInEditMode: 此属性逐步被淘汰,使用 ExecuteAlways 代替。

HideInInspector: 作用于变量,使变量不显示在 Inspector 中,但会进行序列化。

SerializeField: 作用于变量,强制对私有变量进行序列化,并在 Inspector 中显示。

Header: 作用于变量,在变量上方添加标题,可用来分组。

Space: 作用于变量,添加字段间距。

TextArea: 作用于变量,带滚动条的文本输入框。

Multiline: 作用于变量,不带滚动条的多行文本输入框。

Range: 作用于变量,限定 float 或 int 的取值范围。

Tooltip: 作用于变量,为字段添加提示信息,鼠标悬停字段上即可展示。

ContextMenuItem: 作用于变量,对字段添加一个右键菜单,并执行指定的函数。

ContextMenu: 作用于函数,在 Inspector 脚本上下文菜单中添加函数执行命令。【注意】此函数必须是非静态的。

RuntimeInitializeOnLoadMethod: 作用于函数,游戏启动时,会自动调用添加了该属性的方法。

示例程序:

using UnityEngine;

[DisallowMultipleComponent]
[RequireComponent(typeof(Rigidbody))]
[AddComponentMenu("Snippet/Test/UnityEngineAttributeTest")]
[ExecuteAlways]
public class UnityEngineAttributeTest : MonoBehaviour
{

    // 控制可见性
    [HideInInspector]
    public bool isHide;
    [SerializeField]
    private float hp = 10;

    #region 辅助特性
    // 1.Header: 分组说明特性
    // 为成员分组
    // [Header("分组说明")]
    [Header("基础属性")]
    public int age;
    public bool sex;
    [Header("战斗属性")]
    public int atk;
    public int def;

    // 2.Tooltip: 悬停注释
    // 为变量添加说明
    // [Tooltip("注释内容")]
    [Tooltip("闪避")]
    public int miss;

    // 3.Space: 间隔特性
    // 让两个字段间出现间隔
    // [Space()]
    [Space()]
    public int space;

    // 4.Range: 修饰数值的滑条范围
    // [Range(最小值, 最大值)]
    [Range(0, 10)]
    public float luck;

    // 5.Multiline: 多行显示字符串,默认不写参数显示3行
    // 写参数就是对应行
    // [Multiline(5)]
    [ContextMenuItem("Reset", "ResetMultiline")]
    [Multiline()]
    public string multiline;
    private void ResetMultiline() {
        multiline = "";
    }

    // 6.TextArea: 滚动条显示字符串,默认不写参数就是超过3行显示滚动条
    // [TextArea(4, 5)]
    // 最少显示4行,最多5行,超过5行就显示滚动条
    [TextArea(4, 5)]
    public string notice;

    // 7.ContextMenuItem
    // 参数1 显示按钮名
    // 参数2 方法名,不能带参数
    // [ContextMenuItem("按钮名", "方法名")]
    [ContextMenuItem("重置金币", "ResetCoin")]
    public int coin;
    private void ResetCoin() {
        coin = 100;
    }

    // 8.ContextMenu: 为方法添加特性,能够在Inspector中执行
    // [ContextMenu("测试函数")]
    [ContextMenu("清空公告内容")]
    private void ResetNotice() {
        notice = "";
    }
    #endregion

    [ContextMenu("DecreaseHp")]
    private void DecreaseHp()
    {
        if (hp > 0)
        {
            hp--;
        }
    }

    [RuntimeInitializeOnLoadMethod]
    static void OnRuntimeLoad()
    {
        Log.info("OnRuntimeLoad", LogColor.Red);
    }
}

点击脚本上下文菜单中的 DecreaseHp 就会执行脚本中的 DecreaseHp 函数,Hp数值就会减1。

点击multiline字段右键上下文菜单中的Reset,执行脚本中的 ResetMultiline 函数,清空 multiline 字段。

2. UnityEditor常用Attribute

MenuItem: 向Unity编辑器主菜单或面板上下文菜单添加菜单项。

InitializeOnLoad: Unity加载或重新编译脚本时,会调用带有此属性的静态构造函数。

InitializeOnLoadMethod: 作用于函数,InitializeOnLoad的Method版本。【注意】此函数必须是静态的。

示例程序:

using UnityEditor;

[InitializeOnLoad]
public class UnityEditorAttributeTest
{

    static UnityEditorAttributeTest()
    {
        EditorApplication.update += Update;
        Log.info("UnityEditorAttributeTest: Constructor", LogColor.Red);
    }

    // 添加到编辑器菜单中
    [MenuItem("MyMenu/ Do Something")]
    static void DoSomething()
    {
        Log.info("Doing Something...");
    }

    static void Update()
    {
        Log.info("UnityEditorAttributeTest: Update", LogColor.Red);
    }

    [InitializeOnLoadMethod]
    static void InitializeOnLoad() {
        Log.info("InitializeOnLoad");
    }

}

 

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值