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

上一篇测试了生成顺序对执行顺序的影响,链接:LINK

 

这篇主要测试一下Awake,OnEnable,Start三个常用消息的循环顺序

 

 

 

1.测试消息循环顺序

先上一个最简单的打印测试

Unity脚本在层级面板中的执行顺序测试2_第1张图片

测试结果为Awake和OnEnable在第一次循环中,Start在第二次循环中

 

关于调用时的帧数

Unity脚本在层级面板中的执行顺序测试2_第2张图片

第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

Unity脚本在层级面板中的执行顺序测试2_第3张图片

Awake和OnEnable优先被调用,连在此之前调用初始化的机会都没有。

 

 

如果将Prefab保存为非激活状态,并在初始化后激活。即可调用初始化代码:

 

Unity脚本在层级面板中的执行顺序测试2_第4张图片

 

 

 

 

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

 

Unity脚本在层级面板中的执行顺序测试2_第5张图片

 

Awake是针对GameObject,而OnEnable是针对组件Component。所以组件不打开依然会调用Awake

当手动打开组件之后,测试结果与之前一致。

 

 

动态创建测试:

 

Unity脚本在层级面板中的执行顺序测试2_第6张图片

也和上面的测试结果吻合,不能在设置enable之后调用初始化代码。因为OnEnable是立即调用的

 

你可能感兴趣的:(Unity脚本在层级面板中的执行顺序测试2)