> 技术文档 > Unity常用特性(Attribute)用法_unity attribute

Unity常用特性(Attribute)用法_unity attribute


一.UnityEngine命名空间

1.[Header(string)]

inspector面板上给显示的字段上加一个描述

通常情况下,用于在 Inspector 窗口中创建字段的逻辑分组

public class AttributeTest : MonoBehaviour{ [Header(\"public_field_num\")] public int num;}

2.[Tooltip(string)]

在inspector面板上的该字段停留时会显示提示

public class AttributeTest : MonoBehaviour{ [Tooltip(\"show_num_tip\")] public int num;}

3.[Space(float)]

inspector面板中添加垂直空间,使得不同的属性组之间有明确的分隔,参数指定了间距的像素值

public class AttributeTest : MonoBehaviour{ [Space(20.0f)] public int num;}

4.[Range(float min, float max)]

限制数值变量的取值范围并以滑动条显示在Inspector中

public class AttributeTest : MonoBehaviour{ [Range(1.0f, 5.0f)] public int num;}

5.[Min(float)]

限制一个 float或int 类型的变量的最小值

public class AttributeTest : MonoBehaviour{ [Min(1)] public int num;}

6.[AddComponentMenu(string]

用于自定义在 Unity 编辑器的 “Component” 菜单中显示的脚本的位置。
这个特性允许你将脚本添加到特定的菜单路径下,以便更好地组织你的自定义组件。
在 Unity 中,通常情况下,你创建的所有脚本将显示在 “Component/Scripts” 菜单中。这可能会导致菜单变得混乱不堪,尤其是在复杂的项目中。为了解决这个问题,你可以使用 AddComponentMenu特性来将脚本分类和组织。

[AddComponentMenu(\"Menu/AttributeTest\")]public class AttributeTest : MonoBehaviour{ public int num;}

7.[ColorUsage(bool, bool)]

用于指定颜色字段的属性,以便在 Inspector 窗口中显示颜色拾取器,允许用户选择颜色。

ColorUsageAttribute 的参数有两个:

Show Alpha: 这是一个布尔值,用于指定是否显示颜色拾取器中的 Alpha 透明度通道。如果设置为 true,则颜色拾取器将包括 Alpha 透明度通道,允许用户选择带有透明度的颜色。

HDR: 一个布尔值,用于指定颜色是否使用高动态范围 (HDR)。如果设置为 true,颜色值将被视为 HDR 颜色,可以具有更高的亮度和对比度范围。

[AddComponentMenu(\"Menu/AttributeTest\")]public class AttributeTest : MonoBehaviour{ [ColorUsage(true, true)] public Color myColor;}

8.[ContextMenu(string)]

用于在 Inspector 窗口中为组件或脚本添加上下文菜单

这个特性通常用于自定义编辑器扩展,以便提供额外的工具或便捷的功能。例如,你可以在脚本中的方法上添加一个上下文菜单项,当点击该菜单项时,会触发方法执行,用于执行特定任务。

public class AttributeTest : MonoBehaviour{ [ContextMenu(\"Do Something\")] private void CustomMethod() { // 当在 Inspector 中的上下文菜单中选择 \"Do Something\" 时,将触发这个方法。 Debug.Log(\"Doing something...\"); }}

9.[ContextMenuItem(string, string)]

用于在 Inspector 窗口中为字段或属性添加自定义上下文菜单项

你可以在自定义的字段上应用这个特性,以便在 Unity 编辑器的 Inspector 窗口中为它们添加自定义的上下文菜单项。这些菜单项可以在编辑时执行特定的操作

public class AttributeTest : MonoBehaviour{ [ContextMenuItem(\"Reset Score\", \"ResetScore\")] public int playerScore; private void ResetScore() { playerScore = 0; }}

在这个示例中,[ContextMenuItem(“Reset Score”, “ResetScore”)] 特性被应用于 playerScore 字段。
这将为 Inspector 中的 playerScore 字段创建一个上下文菜单项,当在该字段上右击时显示为 “Reset Score”。
当用户在 Inspector 中选择这个菜单项时,将触发 ResetScore 方法,这个方法将 playerScore 重置为 0。

10.[CreateAssetMenu()]

用于在 Unity 编辑器中为脚本创建自定义资源菜单项

这个特性允许你在 “Assets” 菜单下创建新的自定义资源,例如脚本的实例或配置文件。
你可以将 CreateAssetMenuAttribute 特性应用于你的自定义脚本类,以便在 Unity 编辑器中方便地创建新的资源实例。这对于生成自定义配置文件、材质、纹理等非常有用。

[CreateAssetMenu(fileName = \"fileName1\", menuName = \"menu1/menu2\")]public class AttributeTest : ScriptableObject{}

11.[Delayed]

直到用户按 Enter 键或将焦点字段移开后,该字段才会返回新值。

public class AttributeTest : MonoBehaviour{ [Delayed] public float delayedValue = 0.0f; void Update() { Debug.Log(\"Delayed Value: \" + delayedValue); }}

12.[DisallowMultipleComponent]

当你将此特性添加到一个脚本类上时,Unity 将确保在同一 GameObject 上只能添加一个该脚本类型的组件

[DisallowMultipleComponent]public class AttributeTest : MonoBehaviour{}

重复添加有该特性的脚本组件失败

13.[ExecuteInEditMode]

ExecuteInEditMode 特性用于标记在 Unity 中的脚本类,以确保它们在编辑模式下也会执行,而不仅仅在播放模式下执行。这对于那些需要在编辑器中进行实时交互和编辑的脚本非常有用

[ExecuteInEditMode]public class AttributeTest : MonoBehaviour{ public Vector3 somePosition; private void Update() { // 这里的代码将在编辑器模式下执行 transform.position = somePosition; }}

14.[HelpURL(string)]

为类提供自定义文档 URL,按Ctrl键点击可跳转到链接。

[HelpURL(\"https://docs.unity3d.com/cn/2020.3/ScriptReference/HelpURLAttribute.html\")]public class AttributeTest : MonoBehaviour{}

15.[HideInInspector]

HideInInspector用于将字段隐藏在 Inspector 窗口中,即使它们是公共字段

public class AttributeTest : MonoBehaviour{ public int publicField; // 这个字段将显示在 Inspector 窗口中 [HideInInspector] public int hiddenField; // 这个字段将被隐藏,不会在 Inspector 中显示}

16.[Multiline(int)]

用于标记一个字符串字段,告诉 Inspector 窗口该字段可以显示多行文本输入框。

public class AttributeTest : MonoBehaviour{ [Multiline(4)] // 将该字段标记为多行文本输入,显示 4 行文本输入框 public string description;}

17.[RequireComponent(Type)]

用于确保特定类型的组件在同一 GameObject 上一起存在,通常用于协助开发人员避免在 GameObject 上忘记添加必需的组件。

GameObject 上附加了该脚本类,但缺少指定的组件,Play模式下,Unity 将自动添加这些必需的组件,以确保 GameObject 具有正确的组件配置。

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

18.[RuntimeInitializeOnLoadMethod]

用于标记静态方法,在 Unity 运行时初始化时自动调用。

public class AttributeTest : MonoBehaviour{ [RuntimeInitializeOnLoadMethod] static void testInitializeOnLoad() { // 在游戏启动时执行的初始化逻辑 Debug.Log(\"Game is starting, performing initialization...\"); }}

19.[SerializeField]

当将该特性应用于一个字段或属性时,它将允许访问并编辑它,而不需要将字段标记为 public。

public class AttributeTest : MonoBehaviour{ [SerializeField] private int myField;}

20.[SpineAnimation]

[SpineAnimation] 属性允许从SkeletonAnimation中选择Spine动画名称的检查器下拉列表

[SpineAnimation]public string runAnimationName;

二.System命名空间

1.[Serializable]

用于标记脚本的自定义类,使它们可以在 Inspector 中显示并且可以序列化。

自定义类被标记为 SerializableAttribute,这意味着你可以在 Unity 的 Inspector 窗口中创建一个 PlayerSettings 类型的字段,然后设置其属性

public class AttributeTest : MonoBehaviour{ [Serializable] public class PlayerSettings { public string playerName; public int playerScore; public float playerHealth; } public PlayerSettings playerSettings;}

2.[NonSerialized]

用于标记字段,以指示这些字段不应该被序列化,并且不会在Inspector面板上出现。
在 Unity 中,这通常用于在脚本中引用引用对象或在脚本中执行一些不希望在场景序列化时保存的操作。

public class AttributeTest : MonoBehaviour{ // 这个字段将不被序列化 [NonSerialized] public int myInt; public float myFloat;}

三.UnityEditor命名空间

1.[MenuItem(string]

用于在 Unity 编辑器的菜单栏中添加自定义菜单项。
这允许开发人员创建自定义的编辑器工具、快捷方式或功能,并将它们集成到 Unity 编辑器中,以提高工作效率。

MenuItem 特性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 特性。

public class AttributeTest : MonoBehaviour{ // Add a menu item named \"Do Something\" to MyMenu in the menu bar. [MenuItem(\"MyMenu/Do Something\")] static void DoSomething() { Debug.Log(\"Doing Something...\"); }}

2.[InitializeOnLoadMethod]

重新编译项目中的脚本时,会调用带有此特性的静态方法。

在 Unity 首次加载项目时、在 Unity 检测到脚本修改时,以及当进入运行模式时,会进行此调用.

public class AttributeTest : MonoBehaviour{ [InitializeOnLoadMethod] static void Initialize() { // 在指定的时刻执行初始化代码 Debug.Log(\"Initialization method has been called12.\"); }}