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; } }在编辑预制体时若其挂的脚本有这个特性Update内的逻辑会直接写进这个prefab在保存时会产生你编辑之外的其他变化因此编辑预制体时必须注释掉[ExecuteInEditMode]因此编辑预制体时必须注释掉[ExecuteInEditMode]因此编辑预制体时必须注释掉[ExecuteInEditMode]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.); } }