资源组

游戏资源数量庞大,一般不会放在游戏包内,而是从线上下载至本地。一款 MMORPG 手游的资源数量在 60000 个左右,总大小在 1 GB 左右。如果对每个资源文件都独立下载,会产生大量的网络连接。

由于单个资源文件往往并不大,所以小游戏性能优化方案在构建游戏项目时,会将多个资源文件合并成一个 .bin 文件,称为资源组。

分组策略

在资源分组时,会对入口资源进行递归式的依赖分析,把有相同被依赖关系的资源分为一组。

入口资源

如果游戏的首场景是 login.scene,那么 login.scene 就是一个入口资源。 如果基础 UI base.prefab 是一套每个场景都要展示的 UI,那么 base.prefab 也是一个入口资源。

入口资源有 2 种指定方式:

  1. 构建项目时选择的主 2d/主 3d 场景。
  2. 在 engine.ide.json 中配置 resourceDir,配置目录下的所有资源都会成为入口资源。

依赖分析

假设游戏有 2 个入口资源 login.scene 和 game.scene。login.scene 依赖 avatar.texture2d,game.scene 依赖 enemy.texture2d。 那么 login.scene 和 avatar.texture2d 分为一组,game.scene 和 enemy.texture2d 分为一组。

image.png

如果把 avatar.texture2d 和 enemy.texture2d 都改造成 .spriteframe,依赖一个合并了游戏中许多小图的 image.texture2d。 那么在之前分组的基础上,image.texure2d 会独立成一组。

image.png