探索笔记 - Unity生命周期和实例化GameObject的相关时序问题
现有 A B C 三个游戏对象,A挂在场景下作为Root GameObject,仅对Awake Enable Start Update作分析
1.A中Awake实例化B,B的Awake中实例化C
A中Awake实例化B,B的OnEnable中实例化C,执行顺序和上图没有本质上的差别
可以理解成Awake方法末尾调用OnEnable
Awake-OnEnable在第0帧执行,但Start-Update却在第1帧执行
2.A中Awake实例化B,B的Start中实例化C
除了AB,C是Awake-OnEnable-Start-Update都在第1帧执行,可以看出第0帧的区别
3.A中Start实例化B,B的Awake中实例化C
3.A中Start实例化B,B的Start中实例化C
C的Start在AB的Update之后执行,什么情况?
4.A中Update实例化B,B的Update中实例化C
省略了A在Update中实例化B,B在Awake Start中实例化C的情况
可以确定Update中实例化对象,对象的Awake Start会在同一帧,但Updata一定会在一下一帧执行
另外如果你想在Update中去操作刚实例化的对象,那你可能会遇到时序问题,因为它一定执行完了Awake和OnEnable,但在Update这个方法的这一帧里里一定没执行Start
总结起来就是Awake和OnEnable是在Instantiate方法中立刻执行的,Instantiate方法并不直接调用Start方法
顺手做了个试验发现SetActive方法中直接调用了OnEnable方法
做个笔记,遇到类似的时序问题可以翻出来看一下