4. Cocos Creator 核心概念:场景、节点、组件、预制体、资源管理

好,咱们今天聊聊 Cocos Creator 里最核心的几个概念。说实话,很多新手一上来就被这些术语搞懵了。我当年刚接触时也一样,什么场景、节点、组件,感觉像在学哲学。但别担心,这些东西说白了就是搭积木。

4.1 场景(Scene)—— 你的游戏舞台

场景是什么?你可以把它想象成一个舞台。游戏里的每一个画面,比如主菜单、关卡1、结算界面,都是一个独立的场景。

我个人习惯把场景当作「容器」。它本身不干任何事,就是装东西的。你往里面放角色、放背景、放UI,它就变成了一个完整的游戏画面。

核心要点:一个游戏至少有一个场景。场景切换时,旧场景里的东西会被销毁,新场景的东西会被加载。

我在项目中遇到过一个问题:有人把所有东西都塞进一个场景里,结果游戏越做越卡。为什么?因为场景里东西太多,加载慢,内存也扛不住。正确的做法是:按功能拆分场景。比如「加载场景」只放一个进度条,「战斗场景」只放战斗相关的元素。

4.2 节点(Node)—— 最小的积木块

节点是场景里的基本单位。说白了,场景里能看到的一切,都是节点。一个角色是一个节点,一个按钮是一个节点,甚至一个空物体也是一个节点。

节点最重要的特性是:它可以有父子关系。你想想看,一个角色手里拿把剑,剑跟着手移动。怎么实现?把剑节点挂到手节点下面就行了。父节点移动,子节点跟着动。

我的小技巧:用空节点做「容器」。比如一个角色身上有多个部件,我会先建一个空节点当根,再把所有部件挂上去。这样移动、旋转、缩放都方便。

嗯,这里要注意:节点本身没有「行为」。它只是一个位置、一个旋转、一个缩放。想让节点动起来?那就需要组件了。

4.3 组件(Component)—— 给节点注入灵魂

组件是 Cocos Creator 最巧妙的设计。节点是身体,组件就是灵魂。一个节点可以挂多个组件,每个组件赋予它一种能力。

比如:

  • 挂上 Sprite 组件,节点就能显示图片
  • 挂上 Label 组件,节点就能显示文字
  • 挂上 RigidBody 组件,节点就有了物理属性
  • 挂上你自己写的脚本组件,节点就有了自定义行为

我曾经犯过一个错:把所有的逻辑都写在一个脚本里,结果那个脚本越来越长,最后我自己都看不懂了。后来我学乖了,一个组件只干一件事。移动的组件只管移动,攻击的组件只管攻击。这样调试起来特别爽。

避坑指南:我曾经把一个脚本组件挂到100个节点上,结果每个节点都执行了同样的逻辑,性能直接崩了。记住:组件是共享的,但每个节点上的组件实例是独立的。如果逻辑需要区分节点,记得用 this.node 获取当前节点。

4.4 预制体(Prefab)—— 可复用的模板

预制体是什么?说白了就是「保存好的节点模板」。你做好了一个敌人角色,把它拖成预制体。以后想生成敌人,直接复制这个预制体就行。

我刚开始做游戏时,每次生成敌人都是手动复制粘贴节点。后来发现,改一个敌人的属性,所有复制出来的都要手动改一遍,累死个人。预制体解决了这个问题:你改预制体本身,所有实例都会同步更新。

使用预制体的典型场景:

  • 子弹、敌人、道具等需要大量生成的物体
  • UI 中的按钮、列表项等重复元素
  • 需要动态加载和销毁的对象

核心用法:

// 加载预制体
cc.resources.load('prefabs/Enemy', cc.Prefab, function (err, prefab) {
    // 实例化
    let enemy = cc.instantiate(prefab);
    // 添加到场景
    this.node.addChild(enemy);
});

你想想看,如果不用预制体,你得手动创建节点、挂组件、设置属性。用预制体,一行代码搞定。这就是效率。

4.5 资源管理 —— 游戏的血肉

资源包括图片、音频、字体、动画等。没有资源的游戏,就像没有食材的厨房。Cocos Creator 的资源管理有几个关键点:

资源类型 常见格式 加载方式
图片 png, jpg 直接拖入或动态加载
音频 mp3, ogg cc.loader.loadRes
字体 ttf 拖入或动态加载
动画 .anim 挂载 Animation 组件

我个人习惯把资源按类型分文件夹:imagesaudiofonts。这样找起来方便。另外,不要把所有资源都放在一个文件夹里,否则加载时会把整个文件夹都打包进去,浪费内存。

资源加载的黄金法则:按需加载。进入关卡前只加载关卡需要的资源,不要提前加载后面才用到的。抖音小游戏有包体限制,资源管理不好,包体超了,游戏就发不出去。

嗯,这里还要提一下「资源释放」。很多新手只加载不释放,结果内存越占越多。我建议在场景切换时,手动释放不再使用的资源:

// 释放单个资源
cc.loader.release(resUrl);

// 释放整个场景的资源
cc.loader.releaseRes('scene/Level1');

4.6 它们之间的关系

说了这么多,咱们捋一捋:

  1. 场景是最大的容器,装着一堆节点
  2. 节点是基本单位,有父子关系
  3. 组件挂在节点上,赋予节点行为
  4. 预制体是保存好的节点模板,方便复用
  5. 资源是素材,被组件引用和使用

说白了,整个 Cocos Creator 就是围绕这五个概念转的。你把这五个概念搞明白了,后面学什么都是水到渠成的事。

一句话总结:场景是舞台,节点是演员,组件是演技,预制体是替身,资源是道具。记住这个比喻,你就入门了。

好,这一章就到这儿。下一章咱们聊聊「脚本开发」,到时候我会教你怎么用代码控制这些节点和组件。那才是真正让游戏活起来的关键。