1、为什么要打图集 UGUI与NGUI使用上最大的不同是,NGUI使用前就要打图集,UGUI可以在之后再打图集
打图集的目的就是减少DrawCall,提高性能。
简单来说,DrawCall(DC)就是CPU通知GPU进行一次渲染的命令,如果DC次数较多会导致游戏卡顿,我们可以通过打图集,将小图合并成大图,将本应n次的DC变成1次DC来提高性能
2、在Unity中打开自带的打图集功能 在工程设置面板中打开功能
Edit->Project Setting->Editor-> Sprite Packer(精灵包装器,可以通过Unity自带图集工具生成图集)
Disabled | 默认设置,不会打包图集 |
Enabled For Build (Legacy Sprite Packer) | Unity仅在构建时打包图集,在编辑模式下不会打包图集 |
Always Enable (Legacy Sprite Packer) | Unity在构建时打包图集,在编辑模式下运行前会打包图集 |
Enabled For Build | Unity在构建时打包图集,在编辑器模式下不会打包 |
Always Enabled | Unity在构建时打包图集,在编辑模式下运行前会打包图集 |
Legacy Sprite Packer传统打包模式,相对下面两种模式来说,多了一个设置图片之间的间隔距离,有一个参数:
——Padding Power:选择打包算法在计算打包的精灵之间以及精灵和生成的图集边缘之间的间隔距离,这里的数字代表2的n次方
但是在新版的Unity中,相关设置不同,分别是:
- Sprite Atlas V1- Enabled For Builds;
- Sprite Atlas V1- Always Enabled;
- Sprite Atlas V2(Experimental) Enabled;
3、打图集参数注意 图集创建:新建Sprite Atlas(新的版本在2D子目录中)
在UI中如果需要打图集,一般需要将Allow Rotation与Tight Packing勾选去掉
然后在Objects for Packing中将需要打包的图集进行关联,Pack Preview,之后每次加载新图片都从图集中批处理一次性加载,减少DC次数,否则每次加载新图片都要DC(重复的图片不会增加DC次数)
注意:如果在相同图集的关联图片之间插入一个不同图集中的图片/Text(即在Hierarchy中相邻顺序的图集元素之间插入,例如A,B,C在同一图集,D插入B,C之间)并且与图集中的相应图片重叠(D与C重叠),那么图集的批处理会中断,打断渲染顺序,增加DC次数。
创建图集后只有在运行模式中才会生效,在编辑模式中Batches和以前不会有任何变化
如何观察DC的次数:
Game窗口的Stats->Batches
4、代码加载 // 加载图集,参数为图集名
SpriteAtlas sa = Resources.Load("myAtlas");
// 从图集中加载指定名称的小图,可以为某些Image赋值加载
sa.GetSprite("bk");