unity--[xxx]属性简介

目录

1. [RequireComponent]

2. [DisallowMultipleComponent]

3. [ExecuteInEditMode]

4. [HideInInspector]

5. [RequireComponent(typeof(ComponentType))]

6. [AddComponentMenu("MenuName")]  

7. [Header("xxx")]

8. [SerializeField]

9. [Range(min, max)]

10. [Tooltip("...")]

11. [ExecuteAlways]

12. [ContextMenu("...")]


在Unity中,有一些[xxx]的属性,用于对组件的添加和使用进行限制。以下是其中几个常用的属性:

1. [RequireComponent]

        [RequireComponent]属性用于标记一个脚本类,并指定该类所依赖的其他组件。当你将[RequireComponent]属性应用于一个脚本类时,Unity将自动添加所需的组件,以确保该脚本的正确运行。这样可以避免在使用该脚本时忘记添加必要组件的错误。

      例如,如果你有一个脚本类需要依赖刚体组件和碰撞器组件,你可以在该类上添加[RequireComponent(typeof(Rigidbody), typeof(Collider))]。这样,当你将该脚本添加到游戏对象上时,Unity会自动为该对象添加刚体和碰撞器组件(如果它们不存在)。

2. [DisallowMultipleComponent]

       [DisallowMultipleComponent]属性。用于标记一个脚本类,表示在同一个游戏对象上不允许添加多个相同类型的组件。

3. [ExecuteInEditMode]

 [ExecuteInEditMode]属性用于将一个脚本类的功能在编辑器模式下执行,而不仅仅是在运行时。这对于编辑器扩展和自定义编辑器功能非常有用。

    例如,你可以创建一个自定义编辑器脚本,并将其标记为[ExecuteInEditMode]。这样,在编辑器中对游戏对象进行修改时,脚本中的功能会立即生效,方便你实时调整和预览效果。

4. [HideInInspector]

        [HideInInspector]属性用于隐藏一个公共字段或属性,使其在Inspector面板中不可见。这对于希望在脚本中使用但不希望在Inspector面板中编辑的变量非常有用。

   例如,如果你有一个公共的int类型变量,但你不希望在Inspector面板中显示和编辑它,你可以将其标记为[HideInInspector]。这样,该变量将在脚本中使用,但在Inspector面板中将不可见。

5. [RequireComponent(typeof(ComponentType))]

        [RequireComponent(typeof(ComponentType))]属性与上面提到的[RequireComponent]类似,但它用于指定一个脚本类所依赖的组件类型。

   例如,如果你有一个脚本类依赖于另一个自定义脚本类的组件,你可以在该脚本类上添加[RequireComponent(typeof(AnotherComponent))]。这样,在将该脚本添加到游戏对象上时,Unity会自动为该对象添加另一个组件的类型(如果它不存在)。

6. [AddComponentMenu("MenuName")]  

 [AddComponentMenu("MenuName")]属性用于自定义组件在Unity编辑器的"Add Component"菜单中的显示和分类。

   例如,你可以在一个脚本类上添加[AddComponentMenu("Custom/MyComponent")]属性。这样,在Unity编辑器中的"Add Component"菜单中,你可以在"Custom"分类下找到"MyComponent"。

7. [Header("xxx")]

[Header("xxx")] 属性用于在 Inspector 面板中显示一个注释标题,并可以将相关的变量分组显示。

例如,假设你有一个脚本类,其中包含一些公共变量,你可以使用 [Header("Settings")] 来在 Inspector 面板中创建一个标题,用于分组这些变量。

public class MyScript : MonoBehaviour
{
    [Header("Settings")]
    public int variable1;
    public float variable2;
    public string variable3;
}

这样,Inspector 面板中将显示一个名为 "Settings" 的标题,下面是 variable1、variable2 和 variable3 这些变量。

使用 [Header("xxx")] 属性可以提高可读性,方便开发者在 Inspector 面板中快速理解和浏览脚本的变量设置。

8. [SerializeField]

 [SerializeField] 属性用于将私有字段或属性序列化,使其在 Inspector 面板中可编辑。默认情况下,私有字段和属性是不可序列化的,但通过添加 [SerializeField] 属性,你可以将其序列化以便在 Inspector 面板中进行编辑。

   public class MyScript : MonoBehaviour
   {
       [SerializeField]
       private int myValue;
   }

   在上述示例中,`myValue` 字段被标记为 [SerializeField],这样它就可以在 Inspector 面板中显示和编辑。

9. [Range(min, max)]

 [Range(min, max)] 属性用于指定一个数值类型的变量在 Inspector 面板中的取值范围。它会在变量的编辑器控件旁显示一个滑动条或数字调节器,方便开发者选择合适的值。

   public class MyScript : MonoBehaviour
   {
       [Range(0, 100)]
       public float health;
   }

   在上述示例中,`health` 变量的值将在 Inspector 面板中显示为一个范围为 0 到 100 的滑动条。

10. [Tooltip("...")]

      [Tooltip("...")] 属性用于在 Inspector 面板中显示一个工具提示,提供有关字段或属性的额外信息。

   public class MyScript : MonoBehaviour
   {
       [Tooltip("This is the player's speed.")]
       public float speed;
   }


   在上述示例中,当你将脚本添加到对象上并查看 Inspector 面板时,`speed` 字段旁边将显示一个工具提示,其中包含关于该字段的描述信息。

⚠️

 [Header("xxx")]  -------直接显示在属性面板上

[Tooltip("xxx")]        ------需要鼠标选中

11. [ExecuteAlways]

 [ExecuteAlways] 属性用于在编辑器模式和运行时都执行脚本中的代码。它类似于 [ExecuteInEditMode],但它会在运行时实际执行脚本中的功能,而不仅仅是在编辑器模式下。

   public class MyScript : MonoBehaviour
   {
       [ExecuteAlways]
       private void Update()
       {
           // 在编辑器模式和运行时都会执行的代码
       }
   }


   在上述示例中,`Update()` 方法被标记为 [ExecuteAlways],这意味着它将在编辑器模式和运行时都被调用。

12. [ContextMenu("...")]

 [ContextMenu("...")] 属性用于在 Inspector 面板中为某个脚本类添加一个右键上下文菜单项,以执行特定的函数。

   public class MyScript : MonoBehaviour
   {
       [ContextMenu("Reset Position")]
       private void ResetPosition()
       {
           transform.position = Vector3.zero;
       }
   }


   在上述示例中,我们在 `MyScript` 类中添加了一个右键上下文菜单项 "Reset Position"。当在 Inspector 面板中右键点击该脚本组件时,可以选择该菜单项来执行 `ResetPosition()` 函数,将对象的位置重置为原点。

猜你喜欢

转载自blog.csdn.net/lalate/article/details/131635746