初面网初面网

生命周期函数

生命周期函数

Unity 中生命周期函数的赋值顺序(从脚本实例化到第一帧更新):

  1. Awake
    脚本实例被加载时立即调用(无论组件是否启用)。
    用途:初始化不依赖其他脚本的字段或状态。

  2. OnEnable
    当脚本组件被启用或对象激活时调用。
    可能发生在 Awake 之后、Start 之前,每次激活都会重复。

  3. Start
    在脚本启用且在第一帧更新前调用,仅执行一次。
    用途:访问其他已初始化的组件或进行跨脚本赋值。

  4. FixedUpdate
    按固定时间间隔(默认 0.02 s)调用,与物理更新同步。
    用途:处理 Rigidbody 等物理相关赋值。

  5. Update
    每帧调用一次,时间间隔不固定。
    用途:处理常规逻辑赋值。

  6. LateUpdate
    每帧在 Update 之后调用。
    用途:在 Update 赋值完成后,再做跟随、相机等最终赋值。

  7. OnDisable
    当脚本组件被禁用或对象失活时调用。
    可在此清理或保存临时赋值。

  8. OnDestroy
    脚本或游戏对象被销毁时调用。
    用途:释放资源、解除事件注册等最终赋值。

  9. OnApplicationQuit
    当应用程序即将退出时调用(包括编辑器中停止播放模式)。
    用途:执行应用程序级别的清理工作,如保存游戏数据、关闭网络连接、释放全局资源等。

注意:

  • 同一生命周期函数在不同脚本之间的执行顺序可通过 Script Execution Order 设置调整。
  • 不要在 Awake 里访问其他尚未 Awake 的脚本;若必须跨脚本赋值,放在 Start 更安全。

检视面板与脚本赋值顺序

在 Unity 中,检视面板(Inspector)中的赋值与脚本内的赋值执行顺序如下:

执行顺序

  1. 检视面板赋值:在脚本实例化时自动完成(序列化值的加载)
  2. Awake:脚本实例被加载时调用,此时可访问并修改检视面板中的值
  3. OnEnable:组件启用时调用
  4. Start:第一帧更新前调用,可进行依赖其他脚本的赋值

注意事项

  • 检视面板中的值是序列化的,会在对象创建时自动应用
  • Awake 中可以覆盖检视面板中的值,这些修改会在游戏运行时生效
  • Start 中也可以修改检视面板中的值,但此时所有脚本的 Awake 都已执行
  • 若在脚本中定义了默认值,检视面板中的值会覆盖这些默认值

多脚本执行顺序

在 Unity 中,多脚本之间的生命周期函数执行顺序遵循以下规则:

1. 默认执行顺序

  • 同一游戏对象上的多个脚本,其生命周期函数的执行顺序默认是不确定的(取决于脚本添加顺序等因素)
  • 不同游戏对象之间的脚本执行顺序同样不确定

2. 可调整的执行顺序

  • 可通过 Script Execution Order 设置来精确控制不同脚本的执行顺序
  • 此设置位于:Edit → Project Settings → Script Execution Order

3. 生命周期函数间的顺序关系

  • 所有脚本的 Awake 会在 Start 之前执行
  • 所有脚本的 Start 会在第一帧 Update 之前执行
  • 同一帧内,所有脚本的 Update 会在 LateUpdate 之前执行

4. 跨脚本赋值的最佳实践

  • 避免在 Awake 中访问其他脚本,因为无法保证其他脚本是否已初始化
  • 跨脚本的赋值操作建议放在 Start 中执行,此时所有脚本的 Awake 都已完成
  • 对于需要精确控制的场景,使用 Script Execution Order 明确指定执行顺序

5. 组件启用/禁用的影响

  • OnEnableOnDisable 会在组件状态变化时触发,不受其他脚本执行顺序影响
  • 即使脚本被禁用,其 Awake 仍会执行(但 Start 不会)

更新于 2026/2/26