Unity AssetBundle(3):图集Atlas与AB包
2018-02-06 本文已影响197人
云木unity
前篇:Unity AssetBundle(1):Assets打包和依赖(Dependencies)理解
前篇的验证没有加入图集Atlas这个因素,对于图集Atlas与AB包之间的关系 一直有点困惑:
- 一组图片打成图集Atlas,再将这组图片资源打成同一个ab包,图集纹理texture是否会打入到ab中?(前篇验证单张图片会打入ab包中,为何对图集有疑问呢?UGUI的图集是自动打的
sprite packer
,比较不可控) - 图集texture和小图片在ab包内部是怎样的结构?(前篇验证单张Sprite图片在ab包中会有一个Sprite和一个Texture对应)
- 如果一组图片,打成同一个图集Atlas,但不同的ab包,这时的依赖关系是怎么样的?
为此做了一个实验:一组图片四张图tex1-4:
github:GeWenL/AssetBundlePro
tex1-4; 不打图集,且单独打成不压缩的ab包,大小如下图所示。
tex1-4 ab包大小.png现在打成同一个图集Atlas, tex1.png、tex2.png打在tex12 ab包中,tex3.png、tex4.png打在tex34 ab包中:
图集-ab包-tex12和tex34大小.png发现打出来的ab包大小非常大,且大小一样4104K,用UnityStudio查看两个ab包:
图集-ab包-tex12.png 图集-ab包-tex34.png
发现这两个ab包,都写入了相同的图集纹理,只是各自的Sprite不同。
- 问题1: 一组图片打成图集Atlas,再将这组图片资源打成同一个ab包,图集纹理texture是否会打入到ab中?
图集纹理texture会写入到ab包中。 - 问题2:图集texture和小图片在ab包内部是怎样的结构?
ab包内写入了图集texture, 图集中的小图片使用Sprite记录在图集texture中的位置、尺寸信息。与散图的Sprite+Texture 一一对应不同。 - 问题3: 如果一组图片,打成同一个图集Atlas,但不同的ab包,这时的依赖关系是怎么样的?
多个ab包内都会写入相同的图集纹理texture,示例中的tex12 ab包和tex34 ab包都包含了tex1-4组成的图集texture,造成了严重的资源冗余。
同理,如果不打成ab包,直接被多个prefab关联纹理,打出来的prefab ab包也会造成资源冗余。(和前篇中的比较相同)
因此要注意图集与AssetBundle的关系,一个AssetBundle可以包含多个图集,但一个图集的资源只能存在于一个AssetBundle中。否则会造成资源冗余。