场景资源

在 Cocos Creator 3.0 中,游戏场景(Scene)是游戏开发时组织游戏内容的中心,也是呈现给玩家所有游戏内容的载体。而场景文件本身也作为游戏资源存在,并保存了游戏的大部分信息,也是创作的基础。

注意:请尽量避免多人同时修改同一个场景资源,否则可能会导致冲突,且无法通过 git 合并解决冲突。

创建场景

创建场景目前有以下几种方式:

  1. 资源管理器 中右键点击想要放置场景文件的文件夹,然后选择 创建 -> Scene 即可。为了使项目具备良好的文件夹目录结构,强烈建议使用该方法创建场景。

    create scene 1

  2. 资源管理器 中点击左上角的 + 创建按钮,然后选择 Scene 即可。

    create scene 2

  3. 在顶部菜单栏中选择 文件 -> 新建场景,即可在 场景编辑器 中直接创建一个新场景。但 资源管理器 中不会出现新场景文件,需要在保存场景时弹出的 保存场景 窗口中手动保存场景文件,保存完成后才会在 资源管理器 的根目录下出现 scene.scene 场景文件。

    create scene 3

保存场景

方法一:使用快捷键 Ctrl + S(Windows)或 Command + S(MacOS)来快速保存场景。

方法二:在顶部菜单栏中选择 文件 -> 保存场景

切换场景

资源管理器 中,通过双击场景文件打开场景。
如果需要在游戏过程中切换场景,可通过 director.loadScene 等 API 来实现游戏中动态场景加载及切换。

场景属性

双击打开场景文件后,可以看到 层级管理器 中的 scene 是场景节点树的根节点。选中 scene 节点,在 属性检查器 中可设置场景是否自动释放,以及整个场景相关的属性,包括环境光设置,阴影设置、全局雾和天空盒设置。

scene node set

场景资源的自动释放,详情请参考下文 场景资源自动释放策略 部分的内容。

各类属性的详细说明请参考:

场景资源自动释放策略

如果项目中的场景很多,随着新场景的切换,内存占用就会不断上升。除了使用 assetManager.releaseAsset 等 API 来精确释放不使用的资源,我们还可以使用场景的自动释放功能。

双击打开场景文件后,在 层级管理器 选中 scene 节点,即可在 属性检查器 中设置场景是否自动释放:

scene node set

从当前场景切换到下一个场景时,如果当前场景不自动释放资源,则该场景中直接或间接引用到的所有资源(脚本动态加载的不算),默认 都不主动释放。反之如果启用了自动释放,则这些引用到的资源 默认 都会自动释放。

防止特定资源被自动释放

启用了某个场景的资源自动释放后,如果在脚本中保存了对该场景的资源的“特殊引用”,则当场景切换后,由于资源已经被释放,这些引用可能会变成非法的,有可能引起渲染异常等问题。为了让这部分资源在场景切换时不被释放,我们可以使用 Asset.addRef 增加引用计数来锁住这些资源。

“特殊引用”:以全局变量、单例、闭包、“动态资源”等形式进行的引用。
“动态资源”:在脚本中动态创建或动态修改的资源。

以上关于场景资源自动释放部分的内容可以归纳为下图中的几种情况:

release assets

关于资源释放,详细请查看 资源释放