[Unity/TinaX]图集(Atlas)资源简要介绍

2D 项目使用精灵和其他图形来创建其场景的视觉效果。这意味着单个项目可能包含许多纹理文件。Unity 通常会为场景中的每个纹理发出一个绘制调用;但是,在具有许多纹理的项目中,多个绘制调用会占用大量资源,并会对项目的性能产生负面影响。
精灵图集 (Sprite Atlas) 是一种将多个纹理合并为一个组合纹理的资源。Unity 可以调用此单个纹理来发出单个绘制调用而不是发出多个绘制调用,能够以较小的性能开销一次性访问压缩的纹理。

在TinaX Framework的近期更新中,我们为图集资源提供了较为方便的默认处理方式

本文我们将对该功能作简单介绍。

首先,我们需要将包TinaX.UIKit 以及相关依赖包升级到最新版本,在新版本中,我们可以在Project Settings窗口的UIKit设置中看到新增的设置选项

在此处,我们可以配置我们项目中存放Sprite资源的目录,注意:

  • 必须是Sprite相关的专门目录
  • 对于2D项目来说,除了UI之外的地方用到Sprite的也可以配置在这里。

配置之后,当我们往这些目录(包括其子目录)中导入图片时,UIKit工具会自动将其设置为Sprite.

而如果勾选了“图集”选项的目录,在导入图片时,UIKit工具将会自动将其做图集相关的处理。具体的规则是:

  • 每一个目录作为一个图集
  • 如果目录中存在子目录,子目录会单独作为图集(但是框架的规范并不推荐这么干)

具体案例如下:

如图所示,我们将“Assets/Arts/UI/Atlas”目录约定为项目中存放UI图集资源的根目录。在该目录下的”Common”和”Loading”目录都将分别被视为一个“Common”图集和一个”Loading”图集。

如果在设置中没有勾选“使用Sprite Packer (旧版图集)”选项的话,我们可以观察到,UIKit工具在我们导入图片时,自动为其创建了图集文件。


图集与资产管理

讲到上一步为止,其实关于图集的事情就以经完了,不需要我们进行更多操作了。

但是从实际反馈发现,有的开发者对Unity的图集机制不太熟悉,导致出现了“奇怪的问题”,最常见的情况就是“为什么Unity给我图集都打包到别的地方去了”、“为什么我的包体大得这么夸张”等等……

推荐的设定是这样的:一个图集中包含的所有Sprite(图片文件),在打包的时候最好都放在同一个AssetBundle中。否则我们会在不同的AssetBundle中各自看到一个完整的图集,导致包体莫名变大。这也是为什么TinaX的规范是“一个文件夹视为一个图集”,这样方便资产的管理。

在实践中通常建议是每个图集一个AB包,大小控制在几兆的级别。(太大会对热更有负面影响)对于过大的图片(比如背景图)通常建议是作为散图存放,不保存为图集。

如果使用TinaX.VFS包(TinaX默认的资产管理服务)来管理资产的话,对应的推荐设置方式如下:

首先是把图集所在的根目录添加到资产加载白名单。加入白名单的资源,在VFS打包时会主动将其单独打包为AssetBundle,否则只有在资产被其他白名单内的资产引用时,打进其他的AssetBundle,这样就会出现整个图集被打进多个AB包的情况。

而VFS白名单中的资产,默认打包粒度是“每个资产一个AB包”,这样也会导致整个图集被打包进多个AB包的问题。所以我们还需要为图集目录添加特殊构建规则,即将指定目录下的每个子目录,作为一个整体来打包。这个规则正好是与“把每个文件夹视为一个图集”相对应,最终我们得到的打包结果如下:

每个图集对应一个单独的AssetBundle.

yomunsam

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

推荐ヾ(•ω•`)o