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

Posted a_codecat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

Nginx应?场景之反向代理

技术图片
部署tomcat,保持默认监听8080端?

修改nginx配置,并重新加载

修改nginx配置

技术图片
重新加载nginx配置

/nginx -s reload

测试,访问http://111.229.248.243:9003,返回tomcat的??

需求?完成

再部署?台tomcat,保持默认监听8081端?

修改nginx配置,并重新加载

技术图片
这?主要就是多location的使?,这?的nginx中server/location就好?tomcat中的

Host/Context

location 语法如下:

 location [=|~|~*|^~] /uri/ { … }

在nginx配置?件中, location主要有这?种形式:

1)正则匹配 location ~ /lagou { }

2)不区分??写的正则匹配 location ~* /lagou { }

3)匹配路径的前缀 location ^~ /lagou { }

4)精确匹配 location = /lagou { }

5)普通路径前缀匹配 location /lagou { }

优先级

4 > 3 > 2 > 1 > 5




以上是关于Unity架构之详解域重新加载和场景重新加载的主要内容,如果未能解决你的问题,请参考以下文章

unity中 加载大场景怎么解决

unity为啥不能加载脚本

Cocos Creator 加载和切换场景(官方文档摘录)

在 Unity 中使用按钮重置计时器

unity中怎样重新开始游戏?

AJAX请求和跨域请求详解(原生JSJquery)