关于Unity3D 的脚本的执行顺序

阅读了雨松MOMO的《Unity3D研究院之深入理解Unity脚本的执行顺序(六十二)》感觉有些地方还是没有说清楚。

问题如下:

①当在Inspector面板上勾上GameObject的active,但没有勾选脚本时的执行顺序是怎样

②当在Inspector面板上没有勾上GameObject的active,但勾选了脚本时的执行顺序是怎样

③当在Inspector面板上没有勾上GameObject的active,也没有勾选了脚本时的执行顺序是怎样

④当在Inspector面板上勾上了GameObject的active,也勾上了脚本时的执行顺序是怎样


解决这四个问题必须要知道,以下几条规则:

1.正常的脚本时执行顺序为Awake->OnEnable->Start->....->OnDisable->OnDestroy

2.OnDisable 当物体被销毁时 OnDisable将被调用,并且可用于任意清理代码。脚本被卸载时,OnDisable将被调用,OnEnable在脚本被载入后调用。注意: OnDisable不能用于协同程序。
3.OnDestory 当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy只会在预先已经被激活的游戏物体上被调用。注意:OnDestroy也不能用于协同程序。

4.Awake和Start在一个游戏物体的生命周期中只调用一次,但是OnEnable会在每次激活脚本的时候再次执行。

所以,

关于第④个问题,执行顺序因为Awake->OnEnable->Start->....->OnDisable->OnDestroy。

关于第③个问题,不会有任何函数执行,当运行时勾上GameObject的active,Awake函数会立即调用,勾上GameObject的脚本后OnEnable和Start会接着被调用。

关于第②个问题,不会有任何函数执行,当运行时勾上GameObject时,Awake,OnEnable,Start会立即执行。

关于第个问题,Awake会先执行,当运行时勾上GameObject的脚本时,OnEnable,Start会立即执行。

同时注意到汇总后的执行顺序如下

后台()

{

   //脚本A

   A-Awake();

   A-OnEnable();

   //脚本B

   B-Awake();

   B-OnEnable();

   

   A-Start();//脚本A

   B-Start();//脚本B

   ......

   ......

   A-OnDisable();

   B-OnDisable();

   A-OnDestroy();

   B-OnDestroy();

}


最后一张图说明一切

关于Unity3D 的脚本的执行顺序_第1张图片

你可能感兴趣的:(Unity3D)