1.Awake()
当脚本被加载后立即调用Awake方法,这个方法通常在Start()开始之前声明某些变量或者游戏的状态标记符。
Awake在MonoBehaviour声明周期内只被调用一次。
Awake在所有的对象实例化后被调用,所以脚本的一些成员,如果想在创建之后的代码中立即使用,则必须写在Awake()里面。
2.Start()
在Update方法被调用之前开始调用Start方法,Start()是在对象的第一帧时被调用,而且Start方法在整个MonoBehaviour生命周期内也只被调用一次。
Awake和Start不同的地方在于Start方法仅仅在脚本初始化后被调用,这样允许你延迟加载任何代码,直到代码真正被使用时。
3. Update()
在Start方法执行过后,游戏的每一帧都在调用此方法。
4.FixedUpdate()
Update的每一帧调用时间受当前渲染的物体影响,这与当前场景中正在被渲染的物体有关(比如人物的面数,个数等),有时快有时慢,帧率会变化,Update被调用的时间间隔就会发生变化。但是FixedUpdate则不受帧率的变化影响,它是以固定的时间间隔来被调用。
所以一些物理属性的更新操作应该放在FxiedUpdate中操作,比如Force,Collider,Rigidbody等。外设的操作也是,比如说键盘或者鼠标的输入输出Input,因为这样GameObject的物理表现的更平滑,更接近现实。
例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)
public void FixedUpdate()
{
rigidbody.AddForce(Vector3.up);
}
FixedUpdate的时间间隔可以在项目设置中更改,Edit->Project Setting->time 找到Fixed timestep。
为了获取自最后一次调用FixedUpdate所用的时间,可以用Time.deltaTime。这个函数只有在Behaviour启用时被调用。实现组件功能时重载这个函数。
5.LateUpdate()
每一帧都在调用此方法。当每一帧的Update方法全部执行完后,此方法开始被调用。
举个例子,一个宿舍4个人,每个人的起床在update中执行,出发在某个人中的lateupdate执行,这样就可以保证每个人都起床了才会出发。
6.DontDestroyOnLoad()
进入另一个场景时,保证绑定此脚本的对象的内存不被释放掉。也就是说绑定此脚本的GameObject在下一个场景中依然存在。
7.OnGUI()
OnGUI()在每一帧被调用数次(several times),假如MonoBehaviour的enabled属性设置为false时,OnGUI()就失去作用了。