在某些情况下,脚本序列化可能会导致错误。下面列出了一些错误的解决方法。
在 MonoBehaviour 构造函数或字段初始化程序中调用 GameObject.Find 等脚本 API 会触发错误:“不允许从 MonoBehaviour 构造函数(或实例字段初始化程序)中调用 Find,请改为在 Awake 或 Start 中调用。”
可以通过在 MonoBehaviour.Start 中而不是在构造函数中调用脚本 API 来解决此问题。
从标记有 System.Serializable
的类的构造函数中调用 GameObject.Find 等脚本 API 会触发错误:“不允许在序列化期间调用 Find,请改为在 Awake 或 Start 中调用。”
要解决此问题,请编辑您的代码,使其在序列化对象的任何构造函数中都不进行任何脚本 API 调用。
大多数脚本 API 都会受到上述限制的影响。只有 Unity 脚本 API 的一部分不受限制,并且可以从任何地方调用。它们是:
Mathf 函数
简单的自包含结构体;例如数学结构体,如 Vector3 和 QuaternionUnity 表示旋转数据的一种标准方式。在编写处理旋转的代码时,通常应使用 Quaternion 类及其方法。 更多信息
参见 词汇表
为了降低序列化期间发生错误的风险,仅调用自包含且不需要在 Unity 本身获取或设置数据的 API 方法。仅在没有其他选择时才调用这些方法。