在用UGUI时我们也需要将一个个小圖打包成图集,以减小Drawcall(类似coco2d-x一样打包成图集一次性加载以内存换取图片读取效率),UGUI打包并使用图集有两种方法:一种是使用系统自带嘚打包工具SpritePacker;一种是使用TexturePacker打包图片并使用;
关于第一种方法可以参见另一文章,里面有详细的解释与示例使用(文章链接:/archives/3304)这种方法限制比较多,转而用另一种熟悉的方法用TexturePacker工具打包也是本文下面要讲解的
本文所使用的是Unity3d /en/#!/content/16641,下载并成功导入之后不用写任何代码,作任何操作插件会自己根据.tpsheet,将刚才打包好放进入工程的大图自动裁剪成小图如下图,打图集点开
我们只需像使用单独小图一样将图集里的小图拖进Source Image里即可。这时我们还只能在编辑器里设置使用图集
3,我们还需要在程序中 动态加载图集并使用图集里的小图才算是完整的。unity3d 并没有明确api说明我们如何用这种图集而常用Resources.Load()加载只能返回单独的一个图片纹理,所以我们用另一个方法 Resources.LoadAll();加载整一张图集此方法会返回一个Object[],里面包含了图集的纹理 Texture2D和图集下的全部Sprite所以我们就可以根据object 的类型和名字找到我们需要的某张小图片。
4.下面写了一个图集纹理的管理类去统一管理加载,是一个单例类找个不被销毁的GameObject绑定就行, 代码比较简单用一个Dictionary按图集的路径过key将加载过的图集缓存起来,需要时再由外部删除掉下面是代码
//加载图集上的一个精灵 //从缓存中查找图集,并找出sprite