Unity中的生命周期和执行顺序

生命周期

Unity中的生命周期和执行顺序

生命周期执行顺序

Awake

触发时机:当脚本实例被创建时调用
用途:用于游戏对象的初始化
注意:Awake的执行是早于所有脚本的Start函数的,生命周期内只执行一次

OnEnable

触发时机:当对象变为可用或**状态时被调用
用途:用于游戏对象**时所产生的的动作
注意:生命周期内可能执行多次

Reset

触发时机:Reset是在用户点击检视面板的Reset按钮或者首次添加该组件时被调用
用途:最常用于在检视面板中给定一个最常用的默认值
注意:此函数只在编辑模式下被调用

Start

触发时机:Update函数第一次运行之前调用
用途:用于游戏对象的初始化
注意:生命周期内只执行一次

Update

触发时机:每帧调用一次
用途:用于更新游戏场景和状态
注意:生命周期内执行N多次

FixedUpdate

触发时机:每个固定物理时间间隔调用一次
用途:用于物理状态的更新
注意:生命周期内执行N多次

LateUpdate

触发时机:每帧调用一次(在update之后调用)
用途:用于更新游戏场景和状态,一般和相机有关的更新放在这里
注意:生命周期内执行N多次

Update、FixedUpdate和LateUpdate的区别

Update和FixedUpdate的区别:

update跟当前平台的帧数有关,而FixedUpdate是真实时间,所以处理物理逻辑的时候要把代码放在FixedUpdate而不是Update。

Update是在每次渲染新的一帧的时候才会调用,也就是说,这个函数的更新频率和设备的性能有关以及被渲染的物体(可以认为是三角形的数量)。在性能好的机器上可能fps 30,差的可能小些。这会导致同一个游戏在不同的机器上效果不一致,有的快有的慢。因为Update的执行间隔不一样了。

而FixedUpdate,是在固定的时间间隔执行,不受游戏帧率的影响。所以处理Rigidbody的时候最好用FixedUpdate。

PS:FixedUpdate的时间间隔可以在项目设置中更改,Edit->ProjectSetting->time 找到Fixedtimestep。就可以修改了。

Update和LateUpdate的区别:
LateUpdate是在所有Update函数调用后被调用。这可用于调整脚本执行顺序。例如:当物体在Update里移动时,跟随物体的相机可以在LateUpdate里实现。
For example:
        如果两个脚本控制移动同一个物体,如果相机在第一个脚本的Update中,那么它在第一个脚本的Update执行时,就会改变相机的位置,如果后面第二个脚本Update继续更改该物体的位置,那么相机的位置就会是错误的,如果再第二个脚本的Upate中继续更改相机的位置,那么虽然位置正确,但是不停的更改相机位置会导致相机的抖动,展现的效果会很差。
        如果将相机的控制放在LateUpdate中,相机会在所有脚本的Update执行完成后执行操作,可以防止相机的位置错误和抖动等情况的发生。

OnGUI

触发时机:渲染和处理OnGUI事件

OnDisable

触发时机:当前对象不可用或非**状态时被调用

OnDestroy

触发时机:当前对象被销毁时调用