启用场景重新加载和域重新加载后,以下是 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
。