脚本组件的生命周期

前言

脚本组件的生与死-生命周期回调时机


# 一. 生命周期

一个组件从初始化到激活,再到最终销毁的完整生命周期函数调用顺序为:

onLoad → onEnable → start → update → lateUpdate → onDisable → onDestroy

脚本组件的存在依赖于节点,但其生命周期是独立存在的, 也就是说当节点创建(parent),激活(active)和销毁(destroy)时,会触发该节点上脚本组件的生命周期,但当节点操作脚本组件,创建(addComponent),激活(enabled)和销毁(removeComponent)时,也会触发脚本组件完整的生命周期。

# onLoad

脚本组件的初始化阶段,当脚本组件所在节点首次激活时,或者节点处于激活状态下,脚本组件被挂载到节点(addComponent)时触发

# onEnable

当脚本组件的 enabled 属性从 false 变为 true 时,或者所在节点的 active 属性从 false 变为 true 时触发

# start

在脚本组件第一次激活前,也就是第一次执行 update 之前触发

# update

游戏开发的一个关键点是在每一帧渲染前更新物体的行为,状态和方位。这些更新操作通常都放在 update 回调中

# lateUpdate

update 会在所有动画更新前执行,但如果我们要在动效(如动画、粒子、物理等)更新之后才进行一些额外操作,或者希望在所有组件的 update 都执行完之后才进行其它操作,那就需要用到 lateUpdate 回调

# onDisable

当脚本组件的 enabled 属性从 true 变为 false 时,或者所在节点的 active 属性从 true 变为 false 时,或者该脚本组件被移除(removeComponent)时触发

# onDestroy

当脚本组件或者所在节点调用了 destroy() 时 ,或者该脚本组件被移除(removeComponent)时触发,并在当帧结束时统一回收组件


# 二. NodePool中的生命周期

当节点在 NodePool 中时:

# onLoadstart

只会在节点第一次从 NodePool 中取出时触发

# onEnable

当节点从 NodePool 中取出时触发

# onDisable

当节点被放回 NodePool 时触发

# onDestroy

当 NodePool 被 clear 时触发

在 NodePool 中也可以使用 unuse 和 reuse 函数