Unity中有用的特性(Attributes)

文章目录

实用特性

可序列化
[Serializable]
使用该特性修饰的类,其公有对象可以显示在Inspector面板

[Serializable]
public class TestType
{
    public string name;
    public int num;
    public float price;
}

public class Test_Serializable : MonoBehaviour
{
    public TestType type;
}

Unity中有用的特性(Attributes)


在属性面板隐藏
[HideInInspector]
使变量不显示在 Inspector 中

public class Test_HideInInspector : MonoBehaviour
{
    [HideInInspector]
    public int age;
}

Unity中有用的特性(Attributes)


最小值
[Min(最小值)]
设置数值的最小值

public class Test_MinAttribute : MonoBehaviour
{
    [Min(1)]
    public int age;
}

Unity中有用的特性(Attributes)


范围
Range
设置数值的最大最小值

public class Test_RangeAttribute : MonoBehaviour
{
    [Range(1,100)]
    public int rank;

    [Range(0.1f, 1)]
    public float value;
}

Unity中有用的特性(Attributes)


序列化字段
[SerializeField]
可以将私有的字段显示在属性面板

public class Test_SerializeField : MonoBehaviour
{
    [SerializeField]
    int age;
}

Unity中有用的特性(Attributes)


花哨特性

提示
[Tooltip(提示内容)]
鼠标放在字段名上一段时间后,显示提示文字

public class Test_TooltipAttribute : MonoBehaviour
{
    [Tooltip("年龄")]
    public int age;
}

Unity中有用的特性(Attributes)


空隙
[Space]
可以在字段之间空开一定的距离

public class Test_SpaceAttribute : MonoBehaviour
{
    public int value;
    [Space]
    public Vector3 point;
    [Space]
    [Space]
    public string content;
}

Unity中有用的特性(Attributes)


标题
[Header(标题名)]
用于分割字段,给同一类的字段加上标题

public class Test_HeaderAttribute : MonoBehaviour
{
    [Header("基本信息")]
    public string name;
    public int age;
    public bool sex;

    [Header("其它信息")]
    public string address;
}

Unity中有用的特性(Attributes)


菜单相关特性

添加Component中的子菜单
[AddComponentMenu(菜单项目录)]
使用该特性,可以将已有的脚本放在菜单栏Component下的任意位置,默认是在Scripts中

[AddComponentMenu("梁志文/AttributesTest")]
public class AttributesTest : MonoBehaviour
{
}

Unity中有用的特性(Attributes)


为组件添加菜单
[ContextMenu(菜单名)]
使用该特性可以将某个函数以菜单方式添加到Inspector面板

public class Test_ContextMenu : MonoBehaviour
{
    [ContextMenu("打个招呼")]
    public void Test()
    {
        print("你好");
    }
}

Unity中有用的特性(Attributes)

Unity中有用的特性(Attributes)


为变量添加菜单
[ContextMenuItemAttribute(菜单名,函数名)]
使用该特性可以为某个字段(变量)添加一个菜单,右击字段会显示菜单

public class Test_ContextMenuItemAttribute : MonoBehaviour
{
    [ContextMenuItem("清空文本", "ClearText")]
    public string text;

    void ClearText()
    {
        text = "";
    }
}

Unity中有用的特性(Attributes)


组件相关特性

自动添加组件
[RequireComponent(typeof(类名))]
使用该特性修饰的类,类所挂载的物体会自动添加指定类名的组件

[RequireComponent(typeof(Rigidbody))]
public class Test_RequireComponent : MonoBehaviour
{
}

Unity中有用的特性(Attributes)


禁用重复添加同一组件
[DisallowMultipleComponent]
使用该特性可以防止某个组件不小心添加了多次

[DisallowMultipleComponent]
public class Test_DisallowMultipleComponent : MonoBehaviour
{
}

有DisallowMultipleComponent特性的组件只能添加一个,否则可以添加多次
Unity中有用的特性(Attributes)


文本相关特性

文本区域
[TextArea(最小行数,最大行数)]
当文本内容超过最大行数时,显示滚动条

public class Test_TextAreaAttribute : MonoBehaviour
{
    [TextArea(2,4)]
    public string info;
}

Unity中有用的特性(Attributes)


文本多行
[Multiline(行数)]
设置文本框的行数

public class Test_MultilineAttribute : MonoBehaviour
{
    [Multiline(2)]
    public string name;

    [Multiline(5)]
    public string info;
}

Unity中有用的特性(Attributes)


其它特性

延时传递
[DelayedAttribute]
可以延迟传递数值,当按下回车或失去焦点时,数据才会传递给变量

public class Test_DelayedAttribute : MonoBehaviour
{
    [DelayedAttribute]
    public int value = 100;
    int oldValue;
    // Start is called before the first frame update
    void Start()
    {
        oldValue = value;
    }

    // Update is called once per frame
    void Update()
    {
        if (oldValue != value)
        {
            string message = string.Format("数值发生改变\n原数值:{0}\n新数值:{1}", oldValue, value);
            oldValue = value;
            print(message);
        }
    }
}

Unity中有用的特性(Attributes)
修改数值后,只有当按下回车,或者鼠标点击输入框之外,Value的值才会改变
Unity中有用的特性(Attributes)


总是执行
[ExecuteAlways]
脚本挂载到GameObject上时一直执行,不论是在播放模式还是编辑模式。(没加该特性时,只有在播放模式才执行)

[ExecuteAlways]
public class Test_ExecuteAlways : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        if(Application.IsPlaying(this.gameObject))
        {
            print("在播放模式下开始运行");
        }
        else
        {
            print("在编辑模式下开始运行");
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (Application.IsPlaying(this.gameObject))
        {
            print("在播放模式下运行中");
        }
        else
        {
            print("在编辑模式下运行中");
        }
    }
}
  • 编辑模式
    Unity中有用的特性(Attributes)
    Unity中有用的特性(Attributes)
  • 播放模式
    Unity中有用的特性(Attributes)
    Unity中有用的特性(Attributes)

帮助链接
[HelpURL(链接)]
点击问号❓,跳转的帮助文档链接

[HelpURL("https://blog.csdn.net/weixin_44611096/category_10287911.html")]
public class Test_HelpURLAttribute : MonoBehaviour
{
    
}

Unity中有用的特性(Attributes)

上一篇:Unity NaughtyAttributes--InInspector编辑器插件


下一篇:屏幕阅读器是否可以读取JavaScript动态创建的网页?