一、什么是cocos的生命周期?
官方回答:
个人通俗理解:
你建的脚本只要继承自component就会按条件触发这些方法(onLoad,onEnable..)
二.生命周期有哪些方法?
按执行优先级顺序往下排是:
- onLoad 始终会在节点激活时执行一次
- onEnable 在组件激活(enable)时执行一次
- start 在节点激活开始时候执行一次,在onEnable后
- update 节点激活后,每帧(0.016s)执行一次
- lateUpdate 节点激活后,在updata之后每帧执行一次
- onDisable 在组件弃用时候时执行一次
- onDestroy 在节点销毁时候时执行一次
详细解释:
测试场景,先创建空节点并附上TestMain脚本
脚本内容如下:
import { Component, _decorator } from 'cc';const { ccclass } = _decorator;@ccclass('TestMain')
export class TestMain extends Component {onLoad() {console.log("onLoad"); // 始终会在节点激活时执行一次}}
1)onLoad(): 始终会在节点激活时执行一次
执行场景后打印脚本
注意:onLoad()在组件未启用(未勾选)时也会执行,关键在初始加载是否激活
而且只有onLoad()会在未启用(未勾选)时执行
2)onEnabled,start,update,lateUpdate关联条件如下
代码:
start同onLoad类似,区别于onLoad在节点未激活时候也会执行,而start不会
3)onDisable:在组件弃用时候时执行一次
执行第一次打印
弃用组件TestMain第二次打印
再次启用组件第三次打印
4)onDestroy:在节点销毁时候时执行一次
销毁(删除组件)第四次打印
注意:删除节点不会调用onDestroy:,只会调用onDisable
三、生命周期有什么用?
onLoad一般用来加载资源
start用来初始化
onEnable激活功能
update可以做移动,监听
lateUpdate移动后的特效
onDisable隐藏界面后功能
onDestroy资源销毁,避免内存泄漏