禁用域和场景重新加载的详细信息
禁用域重新加载和场景重新加载时 Unity 跳过的内容
从高级角度来看,进入播放模式包括以下主要阶段
-
备份当前场景。仅当场景场景包含游戏环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分段设计和构建您的游戏。 更多信息
参见 术语表已修改时才会发生。允许 Unity 在退出播放模式时将场景恢复到播放模式开始之前的状态。
-
域重新加载。通过重新加载脚本域来重置脚本状态。
-
场景重新加载。通过重新加载场景来重置场景状态。
-
更新场景。这会发生两次;一次不渲染,一次渲染。
域重新加载和场景重新加载的组合任务会重置脚本域并模拟应用程序在播放器中运行时的启动行为。当您在项目设置一系列广泛的设置,允许您配置物理、音频、网络、图形、输入以及项目其他许多方面的行为方式。 更多信息
参见 术语表中禁用它们时,Unity 会跳过这些步骤。
下图提供了有关禁用域重新加载和场景重新加载时 Unity 跳过的确切事件的详细信息。蓝色表示禁用域重新加载时 Unity 跳过的事件,绿色表示禁用场景重新加载时 Unity 跳过的事件。
启用场景重新加载和域重新加载时 Unity 的操作
启用场景重新加载和域重新加载后,这是 Unity 在进入播放模式时执行的所有流程和事件的完整列表
- 将引发 AssemblyReloadEvent 的
beforeAssemblyReload
事件。
- C# 域已停止
a. 对所有 ScriptableObjects 和 MonoBehaviours 调用 OnDisable()
。
b. Unity 等待所有异步操作完成。
- 所有 MonoBehaviours 和 ScriptableObjects 的状态已序列化。
a. 调用 OnBeforeSerialize()
。
b. 序列化所有公共和私有字段值,但标记有 [NonSerialized]
的字段除外。
- 托管包装器已与本机 Unity 对象断开连接。
- Unity 子域已重新加载
a. Mono 域卸载
i. 将引发 AppDomain.DomainUnload
事件。
ii. Unity 子域已销毁
1. 调用 GC 和终结器。
2. 线程已终止。
3. 所有 JIT 信息已删除。
b. 创建新的 Unity 子域。
- 程序集已加载
a. 加载系统程序集。
b. 加载 Unity 程序集。
c. 加载用户程序集。
- 同步上下文已初始化。
- 脚本状态已恢复。
a. 重新创建所有 Unity 对象的可脚本化部分。
i. 调用构造函数,并为静态分配其默认值。
b. 所有 Unity 对象的状态已反序列化
i. 恢复所有 Unity 对象的序列化状态。
1. 将引发 OnAfterDeserialize
事件。
ii. 调用 OnValidate()
。
iii. 对于使用 [ExecuteInEditMode]
属性的脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见 术语表
1. 调用 OnEnable()
。
2. 调用 OnDisable()
。
3. 调用 OnDestroy()
。
- 调用具有 InitializeOnLoad 和 InitializeOnLoadMethod 的方法。
- 调用 AssemblyReloadEvent 的
afterAssemblyReload
。
其他资源