跳到主要内容

场景、节点、组件和 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 实例不会意外共用本应独立的运行状态;关闭父节点后行为与预期一致。

依据:节点和组件、创建和使用组件脚本。