• Unity架构之详解域重新加载和场景重新加载


    一、unity进入运行模式包括以下主要阶段

    • 备份当前场景:这仅在场景被修改后发生。这样当退出运行模式时,Unity 将场景恢复为运行模式开始前的状态。
    • Domain Reload:通过重新加载脚本域来重置脚本状态。
    • Scene Reload:通过重新加载场景重置场景状态。
    • Update Scene:这会发生两次;一次没有渲染,一次有渲染。

    二、禁用 Domain Reload 和 Scene Reload 时,Unity 会跳过什么

    Domain Reload 和 Scene Reload 的组合任务会重置脚本域并模拟应用程序在播放器中运行时的启动行为。如果在 Project Settings 中禁用这些步骤,Unity 会跳过这些步骤。

    下图提供了有关禁用 Domain Reload 和 Scene Reload 时 Unity 跳过的确切事件的详细信息。蓝色表示禁用 Domain Reload 时 Unity 跳过的事件,绿色表示禁用 Scene Reload 时 Unity 跳过的事件。
    在这里插入图片描述


    三、当 Scene Reloading 和 Domain Reloading 都启用时 Unity 执行什么


    启用场景重新加载和域重新加载后,以下是 Unity 进入运行模式时执行的所有进程和事件的完整列表:


    1.引发 AssemblyReloadEvent beforeAssemblyReload 事件。

    2.停止 C# 域:
     a. 针对所有 ScriptableObject 和 MonoBehaviour 调用 OnDisable()。
     b. Unity 等待所有异步操作完成。

    3.序列化所有 MonoBehaviour 和 ScriptableObject 的状态。
     a. 调用 OnBeforeSerialize()。
     b. 序列化所有公共字段和私有字段值,标有 [NonSerialized] 的值除外。

    4.托管的包装器与原生 Unity 对象断开连接。

    5.重新加载 Unity 子域:
     a. 卸载 Mono 域:
      i. 引发 AppDomain.DomainUnload 事件。
      ii.销毁 Unity 子域
        1. 调用 GC 和终结器。
        2. 终止线程。
        3. 删除所有 JIT 信息。
     b. 创建新的 Unity 子域。

    6.加载程序集:
     a. 加载系统程序集。
     b. 加载 Unity 程序集。
     c. 加载用户程序集。

    7.初始化同步上文。


    8.恢复脚本状态。
     a. 重新创建所有 Unity 对象的可编程部分。
      i. 调用构造函数,并为统计信息分配默认值。
     b. 反序列化所有 Unity 对象的状态:
     i. 恢复所有 Unity 对象的序列化状态。
      1. 引发 OnAfterDeserialize 事件。
     ii.调用 OnValidate()。
     iii.对于使用 [ExecuteInEditMode] 属性的脚本:
      1. 调用 OnEnable()。
      2. 调用 OnDisable()。
      3. 调用 OnDestroy()。

    9.调用包含 InitializeOnLoad 和 InitializeOnLoadMethod 的方法。

    10.调用 AssemblyReloadEvent afterAssemblyReload。

  • 相关阅读:
    2022年全球市场喷他佐辛原料药总体规模、主要生产商、主要地区、产品和应用细分研究报告
    centos断电后无法启动
    什么是Spring Web MVC
    计算机毕业设计Java高校教师教学业绩考核系统2021(源码+系统+mysql数据库+lw文档)
    【AirPlay】跨子网、不依赖多播的 AirPlay 镜像
    记我的 Windows Dev Kit 2023 使用体验
    一键批量转码:将MP4视频转为MP3音频的简单方法
    SpringBoot整合ActiveMQ步骤
    ant-design-vue3的table使用总结
    数据结构之链表
  • 原文地址:https://blog.csdn.net/a_codecat/article/details/127869484