场景、节点、组件和 Prefab
一个“宝石”在玩法里是道具,在引擎里通常是一个节点加几种组件:节点表示它在层级与空间中的位置,Sprite 负责显示,Button 或触摸监听负责输入,自定义脚本负责行为。
四个词分别指什么
| 概念 | 可以这样理解 | 例子 |
|---|---|---|
| Scene | 一棵可加载的节点树及相关配置 | 主菜单场景、游戏场景 |
| Node | 层级与变换的载体 | Target、HUD、ResultPanel |
| Component | 挂在节点上的能力或行为 | Sprite、Label、自定义游戏脚本 |
| Prefab | 可反复实例化的节点装配模板 | 相同结构的敌人、格子、金币 |
Node 的父子关系会影响变换和激活状态。把 UI 改挂到另一个父节点,可能改变位置和缩放;把父节点停用,子节点也会从有效激活状态退出。
一个脚本怎样进入场景
import { _decorator, Component, Label } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Welcome')
export class Welcome extends Component {
@property(Label)
message: Label | null = null;
start() {
if (this.message) this.message.string = '准备开始';
}
}
文件名保存为 Welcome.ts,等编译后,把脚本挂到 Game 节点,把一个 Label 拖入 message。每份脚本最多定义一个 Component;多个组件请分文件。@property 让编辑器保存引用;它不是数据库字段,也不会自动寻找同名节点。
this.node 指脚本所在的节点,不一定是你想操作的目标。脚本挂在 Game 上,this.node 就是 Game,操作宝石要使用显式绑定的宝石引用。
什么时候拆组件
十行点击逻辑没必要拆成一整套架构。下面这些变化才是有用信号:同一种行为要在多个节点复用;规则与动画需要独立改动;某个组件的字段和生命周期已经难以解释。
也不要把所有节点都塞进一个全局单例。场景切换后旧节点可能失效,引用仍然存在却不能继续安全操作。
跟 AI 讨论时画出树
Game 上挂 ClickCollector,Target 上有 Button。
规则脚本通过编辑器字段引用 Target 和三个 Label。
Target 只负责接收输入,积分与结算由 Game 的脚本维护。
请不要按全局路径自动搜索节点;若需要新增节点,先更新节点树。
验收:能说出每个脚本挂在哪里;复制一个 Prefab 实例不会意外共用本应独立的运行状态;关闭父节点后行为与预期一致。