Unity2017之后开始支持SpriteAtlas,相较于旧版的SpritePacker变得更加好用,UGUI的图集概念又重新出来了。并且支持运行时访问图集。下面是记录做一键打包图集过程的记录,以及图集相关的回顾。
为什么要打图集?
- 图集将图片打包为2的幂次方的大小,提升GPU处理图片的性能
- 多张图片需要多次DrawCall,合并成一张大图只需要调用一次DrawCall
- 减小包体大小
各种图集解决方案
- NGUI时代,手动打图集。每次图片修改都需要重新打图集,比较麻烦。
- UGUI旧图集解决方案:SpritePacker。SpritePacker的出现是为了弱化图集的概念。不用花心思维护图集了。只需要将要打包到同一个图集的图片设置相同的Tag即可。但是易用性较差。
- UGUI新图集解决方案:SpriteAtlas。小号SpritePacker练坏了,Unity又搞的”新号”。特点:1. 创建,编辑图集,修改图集参数 2.图集变体(Variant) 3.运行时访问
本文介绍Unity最新的SpriteAtlas方式。
SpriteAtlas的一些属性说明
- Type 有两种:Master,Variant(变体),变体图集会复制原有图集,然后根据比例系数进行缩放,进而对不同分辨率的设备进行适配。
- Include in Build 勾选后会在编辑器模式下,运行后会自动加载纹理。如果不勾选则不会自动加载,并触发
SpriteAtlasManager.atlasRequested
事件。在事件中手动填充纹理,否则显示为白色方块。 - Allow Packing 允许打包图集将精灵进行旋转,用来提高图集中空间利用率。
- Tight Packing 压缩有镂空的图片。即,将镂空部分也以填充图片,提高图集中空间利用率。(可能会有问题,暂未发现)
创建图集
手动创建图集只需要在Project
面板右键Create->SpriteAtlas即可。在后面在记录代码创建图集并设置属性。
加载图集中的图片
1 | //运行时访问 |
要是图集多了,一个一个图集的创建,添加精灵,修改设置,很浪费时间。那么能不能写个工具一键创建,设置图集?
设置图集信息
1 | static SpriteAtlas mGenAtlas() |
一键创建所有图集
这里,我将每个图集创建一个文件夹,把对应精灵放进去,以图集的名称命名,然后放到Asssts/UI/UIAtlas/
目录下。
1 | /// 下面拓展方法GetRelativePath() 是用来将绝对路径转化为以Assets开头的相对路径。 |