跳到主要内容

场景、节点、组件与生命周期

级别:首作必学。 场景描述一组对象,节点提供层级与变换,组件给节点增加行为。预制体(Prefab)是可复用的节点结构,适合卡牌、提示框等重复对象。

用最小层级组织一局​

Main
└─ Canvas
├─ HUD 剩余回合、退出
├─ Board 卡牌父节点
│ └─ Card × N 牌面、编号、触摸组件
├─ ResultPanel 结果、重开
└─ GameController 规则状态与流程协调

层级表达空间与所有权,不必与后端模块目录一一对应。GameController 持有局状态;卡牌视图知道自己的 ID,把输入交回控制器;结果面板显示规则结果。

组件生命周期​

回调典型责任
onLoad初始化本组件、检查编辑器引用
onEnable注册可交互期间需要的监听
start首次更新前的准备,避免依赖未初始化对象
update(dt)需要持续推进的行为
onDisable解除活动期监听、停止对应任务
onDestroy清理外部引用和长寿命回调

不要把不同节点的 onLoad 偶然执行顺序当成依赖保证。需要依赖时显式初始化,或使用官方支持的执行顺序机制,并说明理由。

编辑器引用也是依赖​

@property(Label)
turnsLabel: Label | null = null;

onLoad() {
if (!this.turnsLabel) throw new Error('GameController 缺少 turnsLabel 绑定');
}

以上放在已经导入 Label 并启用 @ccclass 的组件中;property 来自 _decorator。在属性检查器中把实际 Label 拖入字段。宁可初始化时报出明确错误,也不要让某次结算时才出现空引用。

场景切换与重开​

首作可以在同一场景里重置规则状态、关闭结算面板并重新渲染。重开时取消当前盖回任务,生成新牌面和新局状态。切换场景适合进入完全不同的内容,但要同时考虑资源归属和异步加载结果。

节点 active = false 会改变组件活动状态;销毁节点也不是把所有外部服务中的引用自动清除。对外部事件总线、平台监听和全局缓存,仍需主动解绑。

练习:连续进入和退出场景,检查每次点击只触发一次业务操作。完成标准:能指出每个监听的注册点、解除点和拥有者。

参考:节点和组件、生命周期回调。