Cocos Creator | Bundle 的压缩类型及内联所有 SpriteFrame

更多教程,请关注公众号

01

配置方法

1自定义 bundle 配置

Bundle 的属性面板:

2内置 bundle 配置

构建面板:

02

压缩类型

压缩类型 功能说明
默认 构建 Asset Bundle 时会将相互依赖的资源的 JSON 文件合并在一起,从而减少运行时的加载请求次数
无压缩 构建 Asset Bundle 时没有任何压缩操作
合并所有 JSON 构建 Asset Bundle 时会将所有资源的 JSON 文件合并为一个,从而最大化减少请求数量,但可能会增加单个资源的加载时间

· 资源的 JSON:

assets 中的每个资源(如:texture,spriteframe,prefab等)在 library/imports/xx/uuid.json 目录中都有对应的资源描述 json,其中 xx 为该资源 uuid 的前两个字符,json 的文件名为该资源 uuid

我们通过一个 demo 来分析下这三种压缩类型

在 bundle 中放入一张图片资源,创建一个空的节点作为预制件,在预制件节点中拖入图片,这样 prefab 和 spriteframe 就会产生关联

1查看资源的 uuid

先了解下资源(texture、spriteframe、prefab)及其 uuid:

2三种压缩类型

在 bundle 的属性面板中选择不同的压缩类型,构建后查看 import 目录中的文件

· 压缩类型:无压缩

三个资源的 json 都存在,creator 没有做任何压缩操作

在 prefab 和 spriteframe 的 json 中可以看到如下关键信息:

· 压缩类型:默认(关闭 内联所有 SpriteFrame)

texture 的 json 还在,但 spriteframe 和 prefab 的 json 不见了,反而多了一个未知的 json,那这个 0e44235c3.json 到底是什么呢?

在构建目录的 bundle 中找到 config.json(所有资源的配置信息,包括路径、类型、版本信息),在 packs 找到该 uuid,可以看到该 uuid 的集合中包含了 spriteframe 和 prefab 的 uuid

打开 0e44235c3.json,可以看到 prefab_1 和 spriteframe 的 json 中的关键信息出现在了合并后的 json 中

creator 将 bundle 中相互依赖(比如:prefab 与 spriteframe)的资源的 json 文件合并在一起,减少 json 的数量,从而减少运行时的加载请求次数,但相应的,会增加 json 的体积

· 压缩类型:合并所有 JSON

import 目录中只有一个 json

同样在 config.json 的 packs 找到该 uuid,可以看到该 uuid 的集合中包含了 texture,spriteframe 和 prefab 的 uuid,也就是所有资源的 uuid

creator 将 bundle 中所有资源的 json 文件合并为一个,从而最大化减少请求数量,但该 json 会随着资源数量增多而增大,从而增加其加载时间

03

内联所有 SpriteFrame

当压缩类型选择默认时,编辑器中会多出一个选项

官方文档中的定义:

自动合并资源时,将所有 SpriteFrame 与被依赖的资源合并到同一个包中

建议网页平台开启,启用后会略微增大总包体,多消耗一点点网络流量,但是能显著减少网络请求数量

建议原生平台关闭,因为会增大热更新时的体积

上面的 demo 中,我们再添加一个预制件,其内容和 prefab_1 相同

· 关闭 内联所有 SpriteFrame:

四个资源的 json 均存在

· 启用 内联所有 SpriteFrame:

texture 的 json 依然存在,但 spriteframe 和 两个 prefab 的 json 被替换为两个未知 json

打开 config.json,依然可以在 packs 里找到他们的身影,发现是每个 prefab 与其依赖的 spriteframe 被合并为一个新的 json

启用后,creator 会将 spriteframe 与其依赖的资源的 json 合并,比如上面的例子中,两个预制件都依赖同一个 spriteframe,构建后,creator 会将该 spriteframe 的 json 分别与两个 prefab 的 json 合并,这样的话,spriteframe 的 json 就会被额外复制一份,同理,有多个预制件,就会被额外复制多份,因此会略微增大总包体,但是能显著减少网络请求数量,因此建议在网页平台开启

如果后期对该图片做修改(保持其 uuid 不变),那么构建后该 spriteframe 的 json 与所有依赖的 prefab 的 json 都会重新合并,在原生平台,热更新的文件就会增多,而关闭后,只有 spriteframe 的 json 会更改,依赖的 prefab 的 json 根据 uuid 就可以找到相关的 spriteframe,这样热更新的体积会减少,因此建议原生平台关闭

回想下,上面例子中压缩类型为默认,关闭内联所有 SpriteFrame 的情况下,当只有1个预制件的时候,构建后依然是将 prefab 和 spriteframe 的 json 合并了,是因为与该 spriteframe 依赖的只有一个 prefab,在保持体积不变的情况下,还能减少请求数量,合并自然是最优的选择

猜你喜欢

转载自blog.csdn.net/u010799737/article/details/120951753