unity 重置场景
时间: 2023-10-06 19:10:33 浏览: 353
Unity重置场景的过程包括以下主要阶段:
1. 备份当前场景:仅在场景被修改后发生,这样当退出运行模式时,Unity可以将场景恢复为运行模式开始前的状态。
2. 停止C#域:对所有ScriptableObject和MonoBehaviour调用OnDisable(),并等待所有异步操作完成。
3. 序列化所有MonoBehaviour和ScriptableObject的状态:调用OnBeforeSerialize(),并序列化所有公共字段和私有字段值。
4. 断开托管的包装器与原生Unity对象的连接。
5. 重新加载Unity子域:卸载Mono域,销毁Unity子域,包括调用GC和终结器、终止线程以及删除所有JIT信息,并创建新的Unity子域。
6. 加载程序集:加载系统程序集、加载Unity程序集和加载用户程序集。
7. 初始化同步上下文。
8. 恢复脚本状态:重新创建所有Unity对象的可编程部分,包括调用构造函数并为统计信息分配默认值,反序列化所有Unity对象的状态,调用OnValidate()以及对于使用[ExecuteInEditMode]属性的脚本,调用OnEnable()、OnDisable()和OnDestroy()。
9. 调用包含InitializeOnLoad和InitializeOnLoadMethod的方法。
10. 调用AssemblyReloadEvent afterAssemblyReload。
换句话说,重置场景时,Unity会备份当前场景、重置脚本状态、重新加载Unity子域和程序集、恢复脚本状态,并执行其他必要的初始化操作。这样可以确保场景在重置后恢复到最初的状态。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Unity架构之详解域重新加载和场景重新加载](https://blog.csdn.net/a_codecat/article/details/127869484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文