为了方便查阅和使用,我把常用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; 特效渐变(如技能光效、伤害飘字)

补充说明

  1. 修饰器支持组合使用,例如:[Header("攻击设置")][Space(8)][Range(10, 50)] public int attackDamage;
  2. 所有修饰器需放在字段/类定义上方,语法严格遵循C#属性规范
  3. 部分修饰器(如[SerializeReference])需Unity 2019.3+版本支持,使用前注意版本兼容性