上一篇测试了生成顺序对执行顺序的影响,链接: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的更多相关文章

  1. Unity脚本在层级面板中的执行顺序测试3

    断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...

  2. Unity脚本在层级面板中的执行顺序测试4-附加整理

    测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...

  3. Unity脚本在层级面板中的执行顺序测试1

    第二篇测试循环时和动态创建时的调用顺序:LINK 测试版本Unity4.6.因为新版本对Transform的排序做了改变,所以不排除旧版本的测试结果不一样.测试时,使用Awake中添加Debug.lo ...

  4. Animation在每一帧中的执行顺序测试

    测试代码: void Update() { transform.position = Vector3.zero; } void LateUpdate() { Debug.Log(transform.p ...

  5. JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载

    JavaScript在页面中的执行顺序 https://blog.csdn.net/superhoy/article/details/52946277 2016年10月27日 15:38:52 阅读数 ...

  6. ORACLE中查询语句的执行顺及where部分条件执行顺序测试

    Oracle中的一些查询语句及其执行顺序 原文地址:https://www.cnblogs.com/likeju/p/5039115.html 查询条件: 1)LIKE:模糊查询,需要借助两个通配符, ...

  7. 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)

    [分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...

  8. Promise对象及它在js中的执行顺序

    关于Promise对象的学习及它的执行顺序 学习阮一峰老师的ES6入门后的记录 1.promise的定义 promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一 ...

  9. Unity脚本的生命周期中几个重要的方法

    1.function Update () {} 正常更新,用于更新逻辑.此方法每帧都会由系统自动调用一次.2.function LateUpdate () {} 推迟更新,此方法在Update() 方 ...

随机推荐

  1. 查询功能:yum [list|info|search|provides|whatprovides] 参数

    [root@www ~]# yum [option] [查询工作项目] [相关参数] 选项与参数: [option]:主要的选项,包括有:   -y :当 yum 要等待使用者输入时,这个选项可以自动 ...

  2. OLTP与OLAP的差异

    OLTP与OLAP的差异 系统类型 OLTP(在线交易系统) OLAP(联机分析系统),DW(数据仓库) 数据来源 操作数据,OLTP通常是原始性数据源 联合型数据:OLAP数据来源于其他OLTP系统 ...

  3. spfa的SLF优化

    spfa的SLF优化就是small label first 优化,当加入一个新点v的时候如果此时的dis[v]比队首dis[q.front()]还要小的话,就把v点加入到队首,否则把他加入到队尾,因为 ...

  4. C++动态内存分配

    C++动态内存分配1.堆内存分配 :C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念:通常定 ...

  5. C++之路进阶——codevs3287(货车运输)

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description A 国有 n ...

  6. HDU 1724 Ellipse(数值积分の辛普森公式)

    Problem Description Math is important!! Many students failed in 2+2’s mathematical test, so let's AC ...

  7. Openssl生成根证书、服务器证书并签核证书

    1.修改Openssl配置文件CA目录: cat /etc/pki/tls/openssl.cnf dir = /etc/pki/CA 2.生成根证书及私钥: #http://www.haiyun.m ...

  8. JSon_零基础_004_将Set集合对象转换为JSon格式的对象字符串,返回给界面

    将Set集合对象转换为JSon格式的对象字符串,返回给界面 需要导入的jar包: 编写:servlet: package com.west.webcourse.servlet; import java ...

  9. /Users/alamps/AndroidStudioProjects/Demo11ListView

    package com.example.demo11listview; import android.os.Bundle; import android.app.Activity; import an ...

  10. Java实现文件的读写,复制

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStr ...