翻译官方生命周期手册,用于开发参考,确认周期方法调用时间和调用频率,配合官网生命周期图使用风味更佳
脚本周期
- 初始化阶段
场景开始时- Awake
场景创建时或prefab实例化时,若为inactive则在active时调用,仅执行一次 - OnEnable
场景加载完,GameObject实例化时,对象enabled时 - OnLevelWasLoaded
场景全部加载完成后 - Reset Editor级别,非playmode下脚本挂载时或主动调用
- Start
仅在场景中所有Awake 和 OnEnable执行后,所有场景中对象第一帧update之前,且仅执行一次
- Awake
- 物理计算阶段
- fixedupdate
每帧根据帧率高低可能多次调用也可能不调用,执行后立即开始物理计算和更新,做移动计算时无需使用Time.deltaTime - 状态机周期
- 状态机更新
- OnStateMachineEnter
挂载在一个动画图形上的状态机首次进入一个状态时的第一帧调用 - OnStateMachineExit
退出状态的最后一帧调用 - 处理图形
评估所有动画图形 - 触发动画事件
在该时间内当前帧和最后一帧之间,触发所有动画片段的动画事件 - 状态周期回调(OnStateEnter/OnStateUpdate/OnStateExit) 一个状态层有最多三个活跃状态,current state, interrupted state, and next state,对应阶段周期方法顺序执行
- 内部物理更新
- 状态机周期
- 处理动画
渲染动画结果图形 - IK动画周期
由workthread写入Transform - 写入属性
由主线程写入场景其他动画属性 - 碰撞事件(Collision、Trigger)
- 协程(yield WaitForFixedUpdate)
在所有脚本的FixedUpdated执行后再执行
- 处理动画
- fixedupdate
- 输入事件
- OnMouseXXX
- 游戏逻辑
- update
- 协程
除WaitForFixedUpdate和WaitForEndOfFrame其他协程时机 - 状态机周期
同物理计算阶段过程,单无内部物理更新 - lateupdate 开始时update的计算都已完成,一普遍用法是相机跟随,update中对人物移动的计算已全部完成,此时在lateupdate中更新相机位置
- 场景渲染
- OnWillRenderObject
若物体可见则每个相机调用一次 - OnPreCull
相机剔除动作前 - OnBecameVisible/OnBecameInvisible
对任何相机可见/不可见时调用 - OnPreRender
相机渲染前 - OnRenderObject
所有常规场景渲染完成时,可在此绘制自定义几何图形 - OnPostRender
当一个相机渲染完场景后 - OnRenderImage
场景渲染后,可对Image做后期处理(滤镜)
- OnWillRenderObject
- Gizmo 渲染
- OnDrawGizmos
仅在editor
- OnDrawGizmos
- GUI渲染
- OnGUI 每帧多次调用
- 帧结束
- yield WaitForEndOfFrame
- 暂停
- OnApplicationPause
一帧最后时调用,调用后会再触发一帧以刷新图像和切换暂停状态
- OnApplicationPause
- 退出/销毁
- OnApplicationQuit
- OnDisable
- OnDestroy
所有帧刷新后