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

news2025/7/22 15:15:01

一、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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

h264编码算法流程

xh264编解码: 编码层:视频压缩解压缩等核心算法,VLC就是这一系列算法,得到的是编码后的比特序列,即VLC数据。 网络抽象层:将压缩后的原始码流拼接头信息用于解码时来识别,安排格式以方便后续的…

APT 注解处理器如何实现Lombok的常用注解功能?带你完整解析

1 背景 在开发中我们常常会用到类似 lombok 、mapstruct 或者 mybatisplus 的框架,只要加入几个注解即可生成对应的方法,既然被很多框架使用,了解其中的原理还是非常有必要的。 2 生成字节码原理 2.1 APT(Annotation Processing Tool )注解…

【论文笔记】用于几何匹配的卷积神经网络结构(CNN for Geometric Matching)

用于几何匹配的卷积神经网络结构(CNN for Geometric Matching) 文章目录AbstractCNNRelated WorkArchitecture for Geometric Matching特征提取:Matching Networkcorrelation-layer归一化:Regression NetworkGeometric TransformationsAffine Transforma…

正大杯市场调查与分析大赛|赛前准备 持续更新ing

目录 1.随机化实验 1.1背景 1.2操作 1.3作用 平衡协变量 克服选择偏差 1.4分类 完全随机化实验 分层随机化实验 配对随机化实验 1.5分层随机化 1.6缺陷 2.均值、中位数、分割点、游程数 ​3. 什么是系统抽样 4.F大于临界值说明什么 5.德宾—沃森(DW)统计量[Dur…

webpack5 CssMinimizerPlugin css压缩

CssMinimizerWebpackPlugin | webpack 中文文档webpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包…

动态修改el-input样式;动态修改elmentUI元素样式;css变量

场景:正常我们动态修改div元素的样式,使用:style和:class即可;但是我们想要动态修改element的组件样式时候,例如el-input字体颜色,由于el-input的样式嵌套很深,我们需要修改的实际是.el-input__inner这个样…

强强合作,替代钉盘/微盘,企业实现低成本扩容

后疫情时代,远程办公不断推动协同办公软件快速发展,协同办公软件活跃度保持增长,无疑不反应出企业对对此类办公产品的喜欢,并保持深度使用。 客户的需求和选择也不是一成不变的,完美日记曾经是企业微信的重点客户&…

【附源码】计算机毕业设计JAVA互联网保险网站

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

9类人事管理场景应用,泛微协助HR释放更多工作量

人事管理数字化是大势所趋: 组织处在不断发展变化的大环境之中,竞争格外激烈,人力资源日益成为组织竞争优势的关键所在。改变传统人事管理模式,推进人事管理数字化变革,把传统的人事管理事务统一到一个平台&#xff0…

从零到一掌握 Docker 的基本原理与实践操作

富 Web 时代,应用变得越来越强大,与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁。本文我们就来探索Docker的神秘世界,从零到一掌握 Docker 的基本原理与实践操作,是时候该开疆扩土啦。 讲个故事 为了更好的理解 …

【BSC】使用Python实现PancakeSwap自动交易(入门篇)

需求 最近我们需要在BSC上实现代币的自动化交易,比如自动把BNB兑换成USDT,自动把USDT兑换成CAKE等其它代币,同时也要监视价格,在价格合适的时候再兑换代币。而PancakeSwap正是BSC上最大的去中心化交易平台,我们已经学…

2022行情变了,请各位做好一年内随时失业的准备

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

【附源码】计算机毕业设计JAVA畜牧场信息管理系统

【附源码】计算机毕业设计JAVA畜牧场信息管理系统 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JAVA …

个人如何调用股票程序交易接口?

关于股票程序交易接口的调用一般只有量化交易投资者才能涉及的到,那么做常见也最实用的方法就是使用外接端口,意思就是可以买一个接口就可以接入交易软件了,不过要具有编程基础才能实现,因为现有的策略和设置的函数都是无法满足投…

OSI七层模型

介绍 七层模型,亦称OSI(Open System Interconnection)。参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。 分层 应用层 提供高级api …

HDFS 基本 shell 操作

HDFS 基本 shell 操作1.1 创建目录1.2 上传指令1.3 创建空文件1.4 向分布式文件系统中的文件里追加内容1.5 查看指令1.6 下载指令1.7 合并下载1.8 移动hdfs中的文件1.9 复制hdfs中的文件到hdfs的另一个目录1.10 删除命令1.11 查看磁盘利用率和文件大小1.12 修改权限1.13 修改文…

子进程信号继承;kill+raise+alarm+pause+信号发生接收和处理+信号屏蔽

子进程对父进程信号继承情况 fork创建子进程,但子进程没有exec 在fork子进程之前: 如果父进程调用signal设置了某个信号的处理方式的话,那么fork出的子进程会继承父进程对该信号设置的处理 强调:只有在fork之前,父进程所设置的信号处理方式&…

餐厅扫码点餐怎么弄_分享扫码点餐小程序开发制作方法

目前市场上有很多扫码点餐的小程序系统,制作方法有三种: 1、使用微信商家推出的扫码点餐小程序,上传营业执照和食品经营许可证就可以开通使用,然后上传自己的菜品信息就可以了,功能相对比较简单。 2、购买餐饮系统公司…

Redis数据持久化(持久化过程中写操作如何处理)

上一节简单分析了Redis数据持久化方式,点击这里查看。但是要考虑的一个问题就是,在Redis持久化的时候,有新的写入指令时,Redis是如何操作的。 1.RDB方式 1.1.同步方式 即save操作,在Redis执行save操作时,…

systemVerilog的变量类型转换

1 Type Casting 1.1 Verilog使用赋值语句进行变量类型转换 阻塞赋值&#xff1a; 非阻塞赋值&#xff1a; < 1.2 systemVerilog增加了变量类型转换符 变量类型转换符可以在任何时刻对表达式进行类型转换而不像Verilog一样只能发生在赋值语句中 logicint a&#xff0c;y&…