测试Unity不同层级下的脚本调用顺序

来源:互联网 发布:sql统计表字段数 编辑:程序博客网 时间:2024/06/06 03:14


写一个简单的测试脚本如下:

public class testOrder : MonoBehaviour {    void Start()    {Debug.Log(gameObject.name+" Start!");    }    void Awake()    {Debug.Log(gameObject.name+" Awake!");    }    void OnEnable()    {Debug.Log(gameObject.name+" OnEnable!");    }    void Update()    {        if (Time.frameCount == 10)        {Debug.Log(gameObject.name+" Update at 10!");        }    }}

建立三个GameObject,层级结构如下:



给3个GameObject全部挂上此脚本,运行后得到的顺序如下:



结论一:当初始都是active状态,完全是按照Inspector由下向上的顺序在运行。

而OnEnable是紧跟着Awake执行,而不是把所有的对象Awake执行后才依次执行OnEnable(PS: OnDisable也是紧跟着Distroy后执行的)

===========================分割线=============================


如果把上述3个对象全部放入同一个Root下面,并把Root设成非激活状态



然后在运行状态激活Root,得到的结果如下:



结论二,在运行状态被激活,按照Inspector由上向下的顺序在运行。


如果在将上述的Root关闭,则3个对象如下顺序关闭:



这个顺序很容易理解,子对象肯定是先于父对象被关闭,而同级的运行顺序同结论二


===========================分割线=============================


下面来测试一下同一个对象上挂多个脚本的运行顺序,


测试结果不一一贴图了,反正结果和前面2个结论类似


结论三:同一个对象下脚本组件的执行顺序如下:

如果初始状态,对象是激活状态,那么按由下到上的顺序执行。

如果运行状态下,激活对象,则按由上到下的顺序执行。

PS:如果用Move Up修改了脚本组件的顺序,对以上运行顺序没有影响,说脚本挂到对象上的顺序,决定了执行顺序

原创粉丝点击