版本:Unity 6 (6000.0)
语言:English
JSON 序列化
序列化最佳实践

脚本序列化错误

在某些情况下,脚本序列化可能会导致错误。下面列出了一些错误的解决方法。

从构造函数或字段初始化程序调用 Unity 脚本 API

MonoBehaviour 构造函数或字段初始化程序中调用 GameObject.Find 等脚本 API 会触发错误:“不允许从 MonoBehaviour 构造函数(或实例字段初始化程序)中调用 Find,请改为在 Awake 或 Start 中调用。”

可以通过在 MonoBehaviour.Start 中而不是在构造函数中调用脚本 API 来解决此问题。

在反序列化期间调用 Unity 脚本 API

从标记有 System.Serializable 的类的构造函数中调用 GameObject.Find 等脚本 API 会触发错误:“不允许在序列化期间调用 Find,请改为在 Awake 或 Start 中调用。”

要解决此问题,请编辑您的代码,使其在序列化对象的任何构造函数中都不进行任何脚本 API 调用。

线程安全的 Unity 脚本 API

大多数脚本 API 都会受到上述限制的影响。只有 Unity 脚本 API 的一部分不受限制,并且可以从任何地方调用。它们是:

  • Debug.Log

  • Mathf 函数

  • 简单的自包含结构体;例如数学结构体,如 Vector3QuaternionUnity 表示旋转数据的一种标准方式。在编写处理旋转的代码时,通常应使用 Quaternion 类及其方法。 更多信息
    参见 词汇表

为了降低序列化期间发生错误的风险,仅调用自包含且不需要在 Unity 本身获取或设置数据的 API 方法。仅在没有其他选择时才调用这些方法。

其他资源

JSON 序列化
序列化最佳实践