Unity AssetBundle(3):图集Atlas与AB包

前篇:Unity AssetBundle(1):Assets打包和依赖(Dependencies)理解

前篇的验证没有加入图集Atlas这个因素,对于图集Atlas与AB包之间的关系 一直有点困惑:

  1. 一组图片打成图集Atlas,再将这组图片资源打成同一个ab包,图集纹理texture是否会打入到ab中?(前篇验证单张图片会打入ab包中,为何对图集有疑问呢?UGUI的图集是自动打的sprite packer,比较不可控)
  2. 图集texture和小图片在ab包内部是怎样的结构?(前篇验证单张Sprite图片在ab包中会有一个Sprite和一个Texture对应)
  3. 如果一组图片,打成同一个图集Atlas,但不同的ab包,这时的依赖关系是怎么样的?

为此做了一个实验:一组图片四张图tex1-4:
github:GeWenL/AssetBundlePro

tex1-4; 不打图集,且单独打成不压缩的ab包,大小如下图所示。

Unity AssetBundle(3):图集Atlas与AB包_第1张图片
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包:


Unity AssetBundle(3):图集Atlas与AB包_第2张图片
图集-ab包-tex12.png
Unity AssetBundle(3):图集Atlas与AB包_第3张图片
图集-ab包-tex34.png

发现这两个ab包,都写入了相同的图集纹理,只是各自的Sprite不同。

  1. 问题1: 一组图片打成图集Atlas,再将这组图片资源打成同一个ab包,图集纹理texture是否会打入到ab中?
    图集纹理texture会写入到ab包中。
  2. 问题2:图集texture和小图片在ab包内部是怎样的结构?
    ab包内写入了图集texture, 图集中的小图片使用Sprite记录在图集texture中的位置、尺寸信息。与散图的Sprite+Texture 一一对应不同。
  3. 问题3: 如果一组图片,打成同一个图集Atlas,但不同的ab包,这时的依赖关系是怎么样的?
    多个ab包内都会写入相同的图集纹理texture,示例中的tex12 ab包和tex34 ab包都包含了tex1-4组成的图集texture,造成了严重的资源冗余。
    同理,如果不打成ab包,直接被多个prefab关联纹理,打出来的prefab ab包也会造成资源冗余。(和前篇中的比较相同)

因此要注意图集与AssetBundle的关系,一个AssetBundle可以包含多个图集,但一个图集的资源只能存在于一个AssetBundle中。否则会造成资源冗余。

相关文章

  1. Unity AssetBundle(1):Assets打包和依赖(Dependencies)理解
  2. Unity AssetBundle(2):工具UnityStudio

你可能感兴趣的:(Unity AssetBundle(3):图集Atlas与AB包)