最近刚入手Unity,也是写了几个简单的小游戏。发如今C#中,类都是继承于MonoBehaviour这个类,而在MonoBehaviour这个类中,有着许多的函数。天然而然的,就想到一个问题,在程序运行过程当中这些函数的执行顺序是怎么样的呢?内部又是如何进行管理的呢?然后经过查阅相应的资料,发现了它们的一些运行规律,大体总结以下:函数
先上一张摘自网上的图,给个直观印象。this
能够看到,最早执行的是Awake()函数,它在整个脚本周期内只执行一次,当MonoBehavior建立后当即调用,且在Start()函数以前执行,咱们可在这里设置this.enable=false;这样脚本便会直接执行OnDisable(),跳过中间的全部方法。spa
OnEnable()函数用于判断这个脚本是否被禁用,若被禁用则直接跳转至OnDisable()函数,未被禁用则向下执行,此时若Start()函数未被执行过,执行之,反之则跳过它。对象
接下来按顺序执行FixedUpdate()函数,Update()函数,在此说一下这两个函数的区别。Update()在每次渲染新的一帧时被调用,FixedUpdate()在通过每一个固定的物理时间间隔后被调用,那么是否是Update()和FixedUpdate()间隔时间同样,就同样了呢?结果是否认的,由于在游戏过程当中,受硬件环境的影响,每帧之间的间隔时间不可能同样,可能会时长时短,此时Update()调用的时间间隔就发生了变化。可是FixedUpdate则不受帧率的变化,它是以固定的时间间隔来被调用,那么这个时间间隔怎么设置呢?Edit->Project Setting->time下面的Fixed timestep。由于它俩的这点不一样,因此,才会有物体的物理运动多用FixedUpdate()处理。继承
在全部的Update()函数都执行完了以后,lateUpdate()将会被调用。注意,是全部的Update()函数,也就是说假如咱们有编号分别为1,2,3,4......,99,100的这么一百个脚本,其中1号脚本有LateUpdate()函数,那么它将在这一百个脚本的Update()都执行完毕后,才会被调用。
生命周期
在这以后就进入渲染模块,这其中有个很是重要的方法为 OnGUI(),固然,若是你使用NGUI或者新出的UGUI,就能够不用管这一步了。游戏
最后即是销毁模块,当脚本的enable=false时,脚本并不会被销毁,而是处于咱们日常所说的被禁用状态,当enable=true时,可回到OnEnable()状态继续执行。当咱们手动销毁脚本或脚本所附属的游戏对象被销毁时,OnDestroy()被调用,至此,整个脚本生命周期结束。it
顺便一提,协同程序在update()函数结束后执行。io