代码检查:冗余的特性用法(冗余的 'SerializeField' 特性)
此检查将在以下条件下高亮显示 [SerializeField] 特性为冗余:
如果字段同时有
[SerializeField]和[NonSerialized]特性,[NonSeralized]特性优先生效,Unity 将忽略[SerializeField]特性。 如果字段同时应用了这两个特性,[SerializeField]特性将被标记为冗余。如果
[SerializeField]特性应用于无法序列化的字段,例如该字段为static或readonly,或该字段所属的类不可序列化(要么未从 Unity 基类如MonoBehaviour派生,要么是未添加[System.Serializable]特性的一般 .NET 类),此检查会将其标记为冗余。
此检查还提供快速修复以移除冗余特性。 对于普通 .NET 类,还提供快速修复,可为类添加 [System.Serializable] 特性。
备注
请注意,在使用显式序列化 API(如 JsonUtility.ToJson )时,Unity 会序列化标记有 [SerializeField] 且所在类没有 [System.Serializable] 的字段。 但如果该类在 Unity 派生类中作为隐式序列化时使用,比如在 MonoBehaviour 基类的字段,则不会对该字段序列化。 这意味着当类仅用于显式序列化时,可能会出现错误的冗余特性警告。
这被认为是边界情况——无法判断类仅被用于显式序列化时,更重要的是在隐式序列化可能失败时进行警告。 边界情况的解决方法是使用快速修复功能为类添加 [System.Serializable] 特性。
另请参阅 Unity 关于 SerializeField 的文档。
2026年 5月 8日