其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解。而且在刚开始就接触Unity3D时,看到所有脚本中编写的类
几乎都继承了MonoBehaviour这个父类,那么MonoBehaviour这个类是干什么的?
首先我们看一关于MonoBehavior这个类的继承关系:
从上图可以看出,MonoBehaviour是间接继承自Component,说明继承自MonoBehaviour的脚本充当的角色是组件的角色,当我们需要将一个自定义脚本已组件的形式添加到对应的GameObject时,该脚
是必须要继承MonoBehaviour。所以综上MonoBehaviour的作用就是开发者可以自定义自己的组件类。
当我们拥有拥有自己的组件类时,我们会对类的生命周期,和一些重要的接口感兴趣,以便在使用过程中,不那么疑惑。
我们可以先看一下 Unity3D官网上的一张图 可以先熟悉一下整体的流程(在网页的中间):
首先我们可以将这张图分成两种状态:
我们主要关心的是在运行状态,因为此时脚本的生命周期真正开始,先看如下图:
当我们点击Unity3D的Play按钮时,脚本会从编辑器模式进入运行模式,会先走Initialization步骤,从名字可以看出,该步骤做的是初始化操作,且确定了三个函数的调用时序
那三个函数有啥区别:
上述是生命周期的开始,我们先不讲生命周期运行,直接将生命周期的结束,如下图:
讲完了生命周期的开始和结束,现在聊聊比较重要的部分:
上述有很多Update 和 很多yield , 关于yield知识点可以看这里 , 我们可以从上述看到三个Update调用的顺序,FixedUpdate --> Update --> LateUpdate:
我们可以看到,Unity是调用完所有脚本的FixedUpdate,在调用所有脚本的Update,在调用所有脚本的LateUpdate。
关于协程中的yield其实很好理解 ,如下图:
比如 yield null ,表示当函数运行到此处时,会挂起(中断),等下一帧,所有的脚本Update运行完后,会继续执行此函数。
(上图的意思是回去检测所有因yield null 挂起的协程 并恢复)