代码检查:冗余的属性使用(冗余的 'SerializeField' 属性)
此检查将在以下情况下将 [SerializeField] 属性标记为冗余:
如果字段同时具有
[SerializeField]和[NonSerialized]属性,[NonSeralized]属性将具有更高优先级,Unity 将忽略[SerializeField]属性。 如果某个字段应用了这两个属性,[SerializeField]属性将被标记为冗余。当
[SerializeField]属性应用于无法序列化的字段时(如该字段为static或readonly,或者其所属类无法序列化,例如没有继承自 Unity 基类如MonoBehaviour,或是没有[System.Serializable]属性的普通 .NET 类),此检查会将该属性标记为冗余。
此检查还提供快速修复功能,可以移除冗余属性。 针对普通 .NET 类,也提供快速修复功能来为该类添加 [System.Serializable] 属性。
备注
请注意,当使用诸如 JsonUtility.ToJson 等显式序列化 API 时,Unity 会序列化带有 [SerializeField] 标记,但未带有 [System.Serializable] 的类中的字段。 但是,如果相同的类被用于 Unity 派生类中的隐式序列化,例如 MonoBehaviour 基类中的字段,则不会序列化该字段。 如果该类只用于显式序列化,则可能会出现错误的冗余属性警告。
这被视为边缘情况——检测某个类是否只用于显式序列化通常不可行,更重要的是在隐式序列化可能失败时发出警告。 该边缘情况的解决方法是使用快速修复功能为类添加 [System.Serializable] 属性。
另请参阅 Unity 有关 SerializeField 的文档。