近来,一直在学习Unity3D,对于任何一个游戏对象的脚本组件,都有很多的方法,Update,Start,OnGUI,Destory等等,那么他们的先后执行顺序是怎样的呢?经过各种查阅资料,基本有了一个个人的理解,废话不多说,先上一张图:
这张图片是2012年左右,一位美国人写的,还比较有权威性。从图上可以看出,当程序开始加载,首先执行的是Awake方法,在Awake方法中就对场景或者Assets文件下的资源进行加载并激活。然后紧接着是执行OnEnable方法,在这里可以this.enable=false,但是一旦设置了enable=fale,那么程序将直接跳到OnDisable方法,其余的都不会执行。。
如果设置了this.enable=true,脚本将继续向下执行。转入OnStart方法,在这里程序会去判断游戏的OnStart方法是否执行过,如果执行过,将不再执行。如果没有执行过,将进入OnStart方法执行,可以在该方法里面做一些初始化操作。比如第一次启动时,将某个游戏对象的坐标设置在了(0,0,0)这个点,然后对象可能变换了位置。后来this.enable=fale(被禁用了),当再启用时(this.enable=true),这个游戏对象将不会再重新回到(0,0,0)这个点。
当OnStart执行完之后,就进入了几个Update方法,先是FixUpdate,然后Update,最后是LateUpdate方法,如果后面写了Reset,将又回到FixUpdate方法,在这四个事件之间进行循环流动。
继续往下执行就是渲染阶段了,需要注意的渲染模块的OnGUI方法,用于绘制图形界面,重绘过程中会不断的擦除帧,绘制帧,每一帧都会被先擦除再重新绘制,可以认为是不断重复的。在这里可以绘制用于提示用户信息的文本框或按钮等。当然如果你使用了NGUI,这个生命周期事情就可以不再考虑了。
最后就是卸载模块。在该模块中先调用OnDisable方法,但在该方法游戏对象并不会被销毁,还可以重新回到Enable状态(OnEnable=true),当手动销毁时,才会调用OnDestroy方法,至此整个脚本组件的执行生命周期结束。
写的比较简单,潦草,还往大家提出建议,共同成长。