首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之SpritePacker打包参数(四)
2014
10-26

UGUI研究院之SpritePacker打包参数(四)

上篇文章说了UGUI上图集的使用,这一篇继续看看SpritePacker怎么打包图集。我觉得我们有必要对比一下NGUI的图集,NGUI在打包图集的时候图集的默认格式是RGBA32,也就是支持带透明通道的图片,这样一张1024的图集也就是4M内存。为了优化图集,我们可以选择把带透明通道图片 和 不带透明通道的图片分开打图集,这样可以减少内存的占用量。

然而着一切的一切在NGUI上都需要手动操作,而SpritePacker则全自动完成。Sprite上的Packing Tag 同一标识的图片UGUI会把相同图片格式的图片打包成同一图集。如下图所示,MomoAtals和RUORUOAtlas就是Packing Tag的标识符,那么此时根据这两个标识符SpritePacker将打出两个图集出来。 因为MomoAtlas这些图片中,一部分是RGBA32格式,还有一部分是ETC 4bits格式,那么MomoAtlas将被在分成两个图集,就是尾缀带Group的。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 1

打包Sprite Packer有两个打包模式,如下图所示分别是DefaultPackerPolicy和TightPackerPolicy。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 2

DefaultPackerPolicy:是默认的打包方式,也是矩形打包方式。他会把所有的小图按照矩形的方式来排列,如果宽高不一样的图片,它们会自动补起。

TightPackerPolicy:是紧密打包方式,也就是尽可能的把图片都打包在图集上,这种方式要比DefaultPackerPolicy打包的图片更多一些,也就是更省空间。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 3

根据图集的布局可以清晰的看到TightPackerPolicy图集更加紧密。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 4

DefaultPackerPolicy模式打包是unity所推荐的,理论上所有图集都可以使用DefaultPackerPolicy来完成打包。还有一个特性就是可以让图集中某几张图片单独采取DefaultPackerPolicy或者TightPackerPolicy的方式。

如下图所示,比如当前打包图集是DefaultPackerPolicy 那么小图中[TIGHT]开头的就表示单独这张图采用TightPackerPolicy打包模式。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 5

 

如下图所示,比如当前打包图集是TightPackerPolicy 那么小图中[RECT]开头的就表示单独这张图采用DefaultPackerPolicy打包模式。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 6

 

Unity只提供了这两种图集打包方法。假如我想自定义打包方式咋办?比如我想设置图片打包格式,或者图集大小等等怎么办?把如下代码放在Editor文件夹下, 在代码里面就可以设置图集的属性了。

如下图所示,SpritePacker就多出了一个打包图集的选项。

UGUI研究院之SpritePacker打包参数(四) - 雨松MOMO程序研究院 - 7

 

有可能我们会同时把很多图片都拖入unity中,虽然可以全选在设置图片的pack tag,但是我觉得最好全自动完成,比如我们把图片放在不同的文件夹下,那么文件夹的名子就可以用做Atals的名子。最后在分享一条这样的脚本。

好了,今天比较高兴,入手了ipad air2 嘿嘿嘿~~ 欢迎大家在下面给我留言我们一起讨论。

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

UGUI研究院之SpritePacker打包参数(四)》有 84 条评论

  1. 1 说:

    ios下spritePacker 图片失真请问怎么解决

  2. Wu Meibin 说:

    Personal版本是不是不支持这个Feature?

  3. lvfy 说:

    http://blog.csdn.net/huutu/article/details/45564555 我想很多人会找 图片批量导入时 格式从texture到sprite(2d and ui)自动转化

  4. UGUI如何使用DDS图片格式呢?

  5. 夕月紫梦 说:

    请问MOMO利用这个方法,打包时散的图片还会打包吗?如果不打包那他们去了哪里啊

  6. 夕月紫梦 说:

    请问MOMO利用了这个方法,打包时还会打包出散的图片吗?

  7. 三味丶 说:

    大神~UI用紧缩模式打包后会串图。怎么解决呀?Image的Shader不支持紧缩裁剪,SpirteRenderer的就可以?

  8. 颜达龙 说:

    momo,在UGUI中,有透明通道的图,只能压成etc2。NGUI的做法Ugui上不好实现,但是有些手机又不支持etc2.请问你们有遇到过这个问题么?

  9. 水林 说:

    雨松大神,之前听说NGUI需要将图集打包成正方形才能在苹果设备上用。但是UGUI的默认不能打包成正方形了,我现在5.3.4f1的版本,你有办法吗。我还听说现在UGUI不用打正方形了,是真的吗

  10. 李嘉 说:

    嗨~鱼松MM 我有两个问题想请教下1.我把2张图的packing tag设置成不一样的测试发现UGUI也能合并成1个pass call。2.UGUI的图集是否进入游戏的时候就全部加载进内存里了

  11. 雨松大师你好,请问Unity自带打包工具,如何保留每个小图片周边的透明像素?

  12. 猫同人 说:

    请问图集如何热更新呢?

  13. long 说:

    如果使用spritepacker的话,安卓想使用etc1好像不行,没法拿到图集做透明贴图

  14. 阿尼薇__ 说:

    请问雨松大大,使用UGUI自带的打包图集方式怎么才能知道这个图集有好多M?就像查看单个图片的时候会显示占用多少M一样?

  15. 枫叶无霜 说:

    请教一个问题,将一组动画序列打包成一个图集后,如何通过代码动态访问呢?是否需要通过TexturePacker打包成图集放在Resource下才能在代码里访问呢?谢谢了~

  16. 三味丶 说:

    大神,问下为什么我没设置packtag之前用assetbundle打出来时99k。设置tag后打出来反而变大成200多K了?按理说打成一张图,应该多余的透明区域都被去掉,应该会更小才对。何解?

  17. 46332659 说:

    TextureImportInstructions ins = new TextureImportInstructions(); 5.0版本这个类删除了 该怎么写 谢谢

  18. qtby5 说:

    请问有没有监听pack结束的方法

留下一个回复

你的email不会被公开。