Skip to content

组件的生命周期

alt text

组件生命周期介绍

Awake

调用时机: 当脚本实例化时,或者在场景加载时,Awake 是所有组件生命周期中第一个被调用的函数,且只会调用一次。

特点: Awake 在脚本的实例化之后,所有组件都还没有启用时执行。它通常用于初始化数据或设置对象的状态。

使用场景: 适用于需要设置初始值、引用其他组件或初始化资源的场景。

Start

调用时机: Start 会在 Awake 执行完毕之后、第一帧更新之前执行。如果组件被启用,Start 会在 OnEnable 调用之后执行一次,且只会调用一次。

特点: 与 Awake 类似,Start 主要用于初始化,但通常用于初始化那些依赖于其他组件(如场景中其他对象、物体等)的逻辑。

使用场景: 用于设置需要依赖其他组件或游戏对象的逻辑,或者确保组件在开始时正确配置。

Update

调用时机: 每一帧都会调用一次,通常用于需要持续更新的功能,比如移动、动画、检测输入等。

特点: Update 是最常用的生命周期函数,在游戏运行时反复执行。在 Update 中做的操作应该尽量高效,否则可能会影响性能。

使用场景: 适用于频繁更新的操作,如物体移动、处理输入、检查条件等。

FixedUpdate

调用时机: FixedUpdate用于物理模拟,通常用于修改物体的物理属性(如刚体、力等)。它的调用频率是固定的,而不是与帧率有关,因此在高帧率下更为稳定。

特点: 如果要操作刚体(Rigidbody)或物理计算,应将代码放入FixedUpdate 中,避免在Update 中进行物理操作,因为这可能导致不同帧率下的不稳定行为。

使用场景: 适用于处理物理计算,如刚体移动、力的施加、物理碰撞等。

LateUpdate

调用时机: LateUpdate 会在每一帧的 Update 函数执行之后调用,用于在所有 Update 调用完之后执行一些操作。

特点: 如果你想确保在所有物体的更新完成之后执行某些操作(例如,跟随摄像机的更新或物理模拟),可以将代码放入 LateUpdate。

使用场景: 适用于需要在所有更新后进行处理的场景,如摄像机跟随、更新物体的位置等。

OnEnable

调用时机: 当组件启用时,OnEnable 会被调用。如果组件在场景开始时就被启用,OnEnable 会在 Awake 之后立即调用。

特点: OnEnable 会在每次组件启用时调用,可以用于订阅事件、初始化需要在每次启用时执行的代码等。

使用场景: 当组件被启用时,或者在 Awake 后需要做进一步初始化的场景。

OnDisable

调用时机: 当组件被禁用时,OnDisable 会被调用。每次禁用组件时都会触发此方法。

特点: OnDisable 可用于清理资源、注销事件或其他与禁用组件相关的操作。

使用场景: 适用于在组件禁用时执行清理工作,尤其是涉及到订阅事件或资源释放的场景。

OnDestroy

调用时机: 当对象或组件被销毁时,OnDestroy 会被调用。这个方法通常会在对象被销毁之前执行。

特点: 如果需要在对象销毁时释放资源(如取消订阅事件、销毁实例等),可以使用此方法。

使用场景: 用于销毁前的资源清理、取消订阅事件等操作。

组件的物理事件回调

物理引擎将通过调用该对象的脚本上的事件函数来报告对象的碰撞情况。可以通过重写相关回调函数对物理事件进行处理。

OnTriggerEnter

调用时机: 当对象挂载碰撞体时与另一个同样挂载了碰撞体的对象发生碰撞时,OnTriggerEnter会被调用。

OnTriggerStay

调用时机: 当对象触发了OnTriggerEnter后尚未开始远离时,OnTriggerStay会被调用。

OnTriggerExit

调用时机: 当对象触发了OnTriggerEnter后开始离开另一对象时,OnTriggerExit会被调用。

OnCollisionEnter

调用时机: 当对象挂载碰撞体(未勾选“is Trigger”)时与另一个同样挂载了碰撞体的对象发生碰撞时,OnCollisionEnter会被调用。

OnCollisionStay

调用时机: 当对象触发了OnCollisionEnter后尚未开始远离时,OnCollisionStay会被调用。

OnCollisionExit

调用时机: 当对象触发了OnCollisionEnter后开始离开另一对象时,OnCollisionExit会被调用。