1. 初始化阶段(仅执行一次)
Awake
- 调用时机:物体被实例化 / 场景加载时立即调用,只要物体处于激活状态,无论脚本是否启用都会执行。若物体创建时是未激活状态,Awake 会延迟到物体第一次激活时调用。
- 执行次数:整个生命周期仅 1 次
- 核心用途:获取自身组件、初始化内部数据、单例赋值、注册内部事件
- 面试关键点:场景中所有物体的 Awake 会全部执行完毕,才会开始执行所有物体的 Start,因此 Awake 中获取其他物体的组件是安全的。
OnEnable
- 调用时机:脚本组件从禁用→启用、GameObject 从非激活→激活时调用,可多次触发。
- 执行次数:每次激活 / 启用都会调用一次
- 核心用途:注册全局事件、订阅消息、对象池取出时重置状态、启动协程
- 对应你的项目:对象池取出物体 SetActive (true) 会触发,子弹、状态的生命周期重置逻辑放在这里最合适。
Start
- 调用时机:脚本启用且物体激活的前提下,第一次 Update 执行之前调用,仅执行 1 次。
- 执行次数:整个生命周期仅 1 次
- 核心用途:初始化外部依赖、获取其他物体引用、配置初始参数
- 面试关键点:Start 一定在 Awake 之后、Update 之前执行,适合写依赖其他物体的初始化逻辑。
2. 物理阶段(固定频率执行)
FixedUpdate
- 调用时机:以固定时间间隔(默认 0.02 秒,可在 Project Settings 中修改)重复调用,和游戏帧率无关,帧率低时一帧会调用多次,帧率高时多帧调用一次。
- 执行频率:固定时间步长,和物理引擎同步
- 核心用途:所有 Rigidbody 物理运算、力的施加、移动同步、碰撞检测逻辑
- 对应你的项目:角色带位移的移动、怪物 AI 的物理判定、带刚体的子弹运动,必须放在这里保证不同设备上物理表现一致。
碰撞 / 触发回调
OnTriggerEnter/Stay/Exit、OnCollisionEnter/Stay/Exit
- 调用时机:物理引擎计算完成后、FixedUpdate 结束前调用,属于物理阶段的收尾。
- 核心用途:处理伤害判定、拾取、碰撞反应
- 对应你的项目:武器碰撞盒的打击判定、技能范围触发,都在这个阶段执行。
3. 游戏逻辑阶段(每帧执行)
Update
- 调用时机:每帧执行一次,执行间隔随帧率波动,是最核心的逻辑更新入口。
- 执行频率:和帧率完全绑定,一帧一次
- 核心用途:玩家输入处理、状态机逻辑更新、非物理类移动、计时器、UI 更新
- 对应你的项目:玩家输入检测、状态机枚举更新、普通逻辑帧更新,全部放在这一层。
4. 动画与后置更新阶段
LateUpdate
- 调用时机:所有物体的 Update 全部执行完毕后,统一执行所有 LateUpdate,一帧一次。
- 核心用途:相机跟随、动画矫正、后置位置修正(保证目标位置已更新完成)
- 面试关键点:它的核心价值是「所有前置逻辑都跑完了再执行」,避免相机跟随出现抖动、位置不同步。
5. 渲染与 GUI 阶段
OnWillRenderObject:物体即将被渲染前调用OnRenderImage:屏幕后处理特效专用OnGUI:IMGUI 绘制,每帧调用多次(事件驱动),项目开发极少使用WaitForEndOfFrame:协程专用,所有渲染、GUI 完成后恢复,用于截图等帧末操作
6. 销毁与卸载阶段
OnDisable
- 调用时机:脚本被禁用、GameObject 被设为未激活、物体销毁前都会调用,可多次触发。
- 执行次数:每次禁用 / 失活都会调用一次
- 核心用途:取消事件订阅、停止协程、清空计时器、对象池回收时清理状态
- 面试关键点:事件解绑必须放在 OnDisable 而非 OnDestroy,否则物体禁用时不会解绑,会造成内存泄漏和空引用。
OnDestroy
- 调用时机:物体被销毁(Destroy)、场景卸载时调用,整个生命周期仅 1 次。
- 执行次数:仅 1 次
- 核心用途:释放持久资源、移除全局注册、清理非托管数据
OnApplicationQuit
- 调用时机:应用程序退出时调用,所有物体销毁前执行
- 核心用途:存档、释放全局资源、断开网络连接
| 对比项 | Update | FixedUpdate | LateUpdate |
|---|---|---|---|
| 执行频率 | 随帧率波动,一帧一次 | 固定时间步长,与帧率无关 | 一帧一次,所有 Update 之后 |
| 时间尺度 | Time.deltaTime | Time.fixedDeltaTime | Time.deltaTime |
| 核心用途 | 输入、逻辑、状态机、UI | 物理运算、刚体移动、碰撞判定 | 相机跟随、动画后置修正 |
| 对应项目 | 状态机逻辑更新、输入检测 | 角色物理移动、子弹飞行 | 相机跟随、动画位置矫正 |