Unity Inspector C# 属性修饰器
为了方便查阅和使用,我把常用Unity Inspector C#属性修饰器按“功能分类”整理成结构化表格,包含核心作用、语法示例和使用场景,兼顾实用性和可读性:
| 功能分类 | 修饰器名称 | 核心作用 | 语法示例 | 适用场景 |
|---|---|---|---|---|
| 布局优化 | [Header("标题")] | 为字段分组添加标题,区分不同模块 | [Header("移动设置")] public float speed; | 字段较多时,按功能分组(如移动/攻击/UI) |
| 布局优化 | [Space(数值)] | 在字段间添加指定像素的空白间距,优化面板可读性 | [Space(10)] public int damage; | 避免字段拥挤,提升面板整洁度 |
| 布局优化 | [Tooltip("提示文本")] | 鼠标悬停字段时显示说明,减少注释依赖 | [Tooltip("角色移动速度(m/s)")] public float speed; | 字段用途不直观时,添加操作/数值说明 |
| 字段控制 | [Range(min, max)] | 将数值字段转为滑块输入,限制输入范围 | [Range(0, 100)] public float hp; | 需限制数值区间(如血量、音量、速度) |
| 字段控制 | [Min(数值)] | 限制字段最小值(仅限制输入,无滑块) | [Min(0)] public float gravity; | 只需下限(如重力、冷却时间) |
| 字段控制 | [Max(数值)] | 限制字段最大值(仅限制输入,无滑块) | [Max(10)] public int maxLevel; | 只需上限(如最大等级、最大数量) |
| 字段控制 | [TextArea(minLine, maxLine)] | 多行文本输入框,支持自动换行和滚动 | [TextArea(2, 5)] public string desc; | 长文本描述(如角色介绍、任务说明) |
| 字段控制 | [Multiline(行数)] | 固定行数的多行文本,不自动滚动 | [Multiline(3)] public string note; | 短文本备注(如调试信息、简单说明) |
| 显示/序列化 | [SerializeField] | 强制序列化私有/保护字段,在Inspector显示(不改变访问权限) | [SerializeField] private int coin; | 需暴露私有字段给编辑器,不允许代码修改 |
| 显示/序列化 | [HideInInspector] | 隐藏公有字段,不在Inspector显示(仍会序列化) | [HideInInspector] public bool isDebug; | 公有字段无需手动编辑(如运行时自动赋值) |
| 显示/序列化 | [NonSerialized] | 不序列化字段,也不在Inspector显示(公有/私有均生效) | [NonSerialized] public string tempData; | 临时数据(如缓存、计算结果),无需持久化 |
| 显示/序列化 | [SerializeReference] | 支持多态类型序列化,保留子类实例信息 | [SerializeReference] public BaseSkill skill; | 多态场景(如技能系统、道具系统) |
| 显示/序列化 | [FormerlySerializedAs("旧字段名")] | 字段重命名后,保留旧数据(避免丢失配置) | [FormerlySerializedAs("oldHp")] public int currentHp; | 迭代时修改字段名,需保留历史配置 |
| 功能扩展 | [ContextMenu("按钮名称")] | 在组件右键菜单添加自定义按钮,执行指定方法 | [ContextMenu("ResetData")] void ResetData(){} | 调试/快捷操作(如重置数据、生成配置) |
| 功能扩展 | [ContextMenuItem("按钮名", "方法名")] | 为单个字段添加右键菜单按钮 | [ContextMenuItem("测试伤害", "TestDamage")] public int damage; | 针对单个字段的快捷操作(如测试数值效果) |
| 功能扩展 | [ExecuteInEditMode] | 脚本在编辑器模式下执行(运行时仍生效) | [ExecuteInEditMode] public class EditorTool : MonoBehaviour {} | 编辑器工具(如场景布局、资源检查) |
| 功能扩展 | [ExecuteAlways] | 脚本在编辑器模式、预制体模式、运行时均执行 | [ExecuteAlways] public class GlobalTool : MonoBehaviour {} | 全局工具(如日志输出、资源监控) |
| 组件约束 | [DisallowMultipleComponent] | 禁止组件在同一GameObject上重复挂载 | [DisallowMultipleComponent] public class PlayerController : MonoBehaviour {} | 核心组件(如玩家控制、相机管理),避免冲突 |
| 组件约束 | [RequireComponent(typeof(目标组件))] | 挂载当前组件时,自动添加依赖组件(不可移除) | [RequireComponent(typeof(Rigidbody))] public class MoveController : MonoBehaviour {} | 依赖其他组件的脚本(如移动需刚体) |
| 菜单自定义 | [AddComponentMenu("菜单路径/组件名")] | 自定义组件在Editor菜单中的路径,方便查找 | [AddComponentMenu("Game/Player/PlayerController")] public class PlayerController : MonoBehaviour {} | 项目组件较多时,按功能分类整理菜单 |
| 其他实用 | [ColorUsage(bool, bool)] | 控制颜色选择器是否支持Alpha通道、HDR | [ColorUsage(false, true)] public Color hdrColor; | 需要HDR颜色(如灯光、特效)或禁用透明通道 |
| 其他实用 | [GradientUsage(bool)] | 控制渐变选择器是否支持 HDR | [GradientUsage(true)] public Gradient skillGradient; | 特效渐变(如技能光效、伤害飘字) |
补充说明
- 修饰器支持组合使用,例如:
[Header("攻击设置")][Space(8)][Range(10, 50)] public int attackDamage; - 所有修饰器需放在字段/类定义上方,语法严格遵循C#属性规范
- 部分修饰器(如
[SerializeReference])需Unity 2019.3+版本支持,使用前注意版本兼容性