目录
2. [DisallowMultipleComponent]
5. [RequireComponent(typeof(ComponentType))]
6. [AddComponentMenu("MenuName")]
在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()` 函数,将对象的位置重置为原点。