Unity脚本在层级面板中的执行顺序测试2
上一篇测试了生成顺序对执行顺序的影响,链接:LINK
执行顺序测试3: LINK
这篇主要测试一下Awake,OnEnable,Start三个常用消息的循环顺序
1.测试消息循环顺序
先上一个最简单的打印测试

测试结果为Awake和OnEnable在第一次循环中,Start在第二次循环中
关于调用时的帧数

第0帧是不做渲染的,第一帧才做渲染,并且Start延后一帧
2.测试动态创建时的顺序
2.1 - Component和GameObject都为打开状态
public TMP template; void Start()
{
var go = Instantiate(template.gameObject);
print("--Creater Modify--");
go.SetActive(true);
}
Dynamic Create

Awake和OnEnable优先被调用,连在此之前调用初始化的机会都没有。
如果将Prefab保存为非激活状态,并在初始化后激活。即可调用初始化代码:


2.2 - 测试GameObject为打开状态,Component非打开状态(后手动打开)

Awake是针对GameObject,而OnEnable是针对组件Component。所以组件不打开依然会调用Awake
当手动打开组件之后,测试结果与之前一致。
动态创建测试:

也和上面的测试结果吻合,不能在设置enable之后调用初始化代码。因为OnEnable是立即调用的
Tips:虽然Start延后一帧,但Awake/OnEnable和Start之间并不会穿插进Update/FixedUpdate的调用,
但IEnumerator Start()造成的异步执行,是会有Update/FixedUpdate调用的。
最后归纳一下:
1.Awake和OnEnable在第一次循环中,Start在第二次循环中。并且Start延后一帧。
2.如果是静置物体,Awake/OnEnable在第0帧调用,Start在第1帧调用。
3.OnEnable,Start消息属于组件本身,Awake属于GameObject。所以即使组件不激活,Awake也会被调用
4.在Awake/OnEnable和Start之间虽然延后一帧,但并不会穿插进Update/FixedUpdate的调用
Unity脚本在层级面板中的执行顺序测试2的更多相关文章
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
- Unity脚本在层级面板中的执行顺序测试4-附加整理
测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...
- Unity脚本在层级面板中的执行顺序测试1
第二篇测试循环时和动态创建时的调用顺序:LINK 测试版本Unity4.6.因为新版本对Transform的排序做了改变,所以不排除旧版本的测试结果不一样.测试时,使用Awake中添加Debug.lo ...
- Animation在每一帧中的执行顺序测试
测试代码: void Update() { transform.position = Vector3.zero; } void LateUpdate() { Debug.Log(transform.p ...
- JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载
JavaScript在页面中的执行顺序 https://blog.csdn.net/superhoy/article/details/52946277 2016年10月27日 15:38:52 阅读数 ...
- ORACLE中查询语句的执行顺及where部分条件执行顺序测试
Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符, ...
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
[分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...
- Promise对象及它在js中的执行顺序
关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一 ...
- Unity脚本的生命周期中几个重要的方法
1.function Update () {} 正常更新,用于更新逻辑.此方法每帧都会由系统自动调用一次.2.function LateUpdate () {} 推迟更新,此方法在Update() 方 ...
随机推荐
- Eclipse中进行Gradle+Jetty部署的web项目的断点调试
1.自行配置好build.gradle文件和按照gradle的web项目目录结构规范建立java.resourece和webapp文件夹 可在build.gradle文件中自由设定“http端口” 1 ...
- Struts2配置文件各种标签的含义
最近正在学习Struts2,在配置文件中遇到好多标签,各种意义不同.为了方便学习,便把各种标签的书写和含义总结如下:(随时更新) <struts> <!-- 开启使用开发 ...
- eclipse 导入jdbc4.jar 包
详细讲解链接 http://wenku.baidu.com/link?url=QUhO2rIL2fYRgOUyd1TQPEgbl0jQr156ioxK5fiwSPm_Tset2okpBEJcO1fmz ...
- ls -l 列表信息详解
我们平时用ls -l 命令查看一个目录下的文件和子目录的详悉信息时,会得到一个详细的文件和目录名列表.这个列表包含了文件的属性,所属用户,所属组,创建时间,文件大小等等信息.这些信息到底是什么意思呢? ...
- angular 依赖注入
依赖注入 依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题.关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/art ...
- 夺命雷公狗---DEDECMS----16dedecms取出首页今日更新
我们这次就要来取出我们的电影和电视剧以及综艺节目: 我们首先在我们受页面的模版文件中获取电影和电视剧的标签: 我们发现这里有一大堆,我只留一个即可: 然后我们到后台更新下首页的模版,看下是否只有一个模 ...
- PAT乙级 1012. 数字分类 (20)
1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...
- CMMI集谈
SEPG(Software Engineering Process Group)是软件工程过程组的缩写,指由软件过程专家组成的团队,负责在软件组织内推动和促进软件过程改进.最早在CMM中提出,1990 ...
- Openstack的镜像上传原理
openstack的horizon的上传镜像流程 通过html的form表单上传文件 先上传到horizon指定的临时目录,存储起来 通过glance-api请求接口 实际上glance-api也是提 ...
- "服务器 '' 上的 MSDTC 不可用。"
调试程序的时候,出现异常消息“The underlying provider failed on Open”: 详细信息:和{"服务器 '' 上的 MSDTC 不可用."}: 网上 ...