您的位置:首页 > 移动开发 > Unity3D

Unity3d中脚本生命周期

2016-05-06 19:50 337 查看
最近刚入手Unity,也是写了几个简单的小游戏。发现在C#中,类都是继承于MonoBehaviour这个类,而在MonoBehaviour这个类中,有着许多的函数。自然而然的,就想到一个问题,在程序运行过程中这些函数的执行顺序是怎么样的呢?内部又是如何进行管理的呢?而后通过查阅相应的资料,发现了它们的一些运行规律,大致总结如下:

先上一张摘自网上的图,给个直观印象。


可以看到,最先执行的是Awake()函数,它在整个脚本周期内只执行一次,当MonoBehavior创建后立即调用,且在Start()函数之前执行,我们可在这里设置this.enable=false;这样脚本便会直接执行OnDisable(),跳过中间的所有方法。

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()被调用,至此,整个脚本生命周期结束。

顺便一提,协同程序在update()函数结束后执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: