更多教程,请关注公众号
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,在保持体积不变的情况下,还能减少请求数量,合并自然是最优的选择