生命周期
生命周期执行顺序
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
触发时机:当前对象被销毁时调用