zoukankan      html  css  js  c++  java
  • 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的调用

  • 相关阅读:
    html+css基础
    Jquery初级学习-实例3--视频网站视频展示效果
    Jquery初级学习-实例3--网站超链接和图片提示效果
    kali优化配置(3)--工具箱
    Raven2
    kali优化配置(2)
    kali优化配置(1)
    实验(1)
    sqli(7)
    CtfStudying之SSH私钥泄露
  • 原文地址:https://www.cnblogs.com/hont/p/5034419.html
Copyright © 2011-2022 走看看