版權聲明:本文轉自http://blog.csdn.net/huutu 轉載請帶上 http://www.liveslives.com/
在學習UGUI的過程中,一直使用小圖也就是散圖,一個按鈕一個圖片,一個圖標一個圖片,這樣每一個圖片都有一個Drawcall。
之前公司的游戲都是使用Unity4.3+NGUI,在NGUI中可以使用Texturepacker,先把小圖片打包成一張大圖,然后在NGUI中設置引用大圖中的哪一塊作為圖片,這樣能減少很多Drawcall。
但是在UGUI中沒有辦法使用Texturepacker了,也迷糊了幾天。
之后一直在百度谷歌尋找,才發現原來Unity4.6中自帶了圖集打包工具SpritePacker。
在Unity4.6中,我們把一張圖片拖入到Project中,可以設置它的用途,是Texture還是作為2DUI使用。而且注意到多了一個 Packing Tag的設置項。這個設置項就是設置小圖打包成大圖后的atlas的名稱!
注意:
放在Resources中的圖片,Unity不會打包到圖集中!
來看下面的實例:
我在界面中放了7個image,每個image是一張不同的圖片

喜聞樂見的7個Drawcall,7個圖片就7個Drawcall,嗯,老板讓我明天滾蛋了。
然后我們來看下如何打開Unity自帶的自動的圖集打包。
首先,Unity默認是在編輯器環境下不打開圖集打包工具的,只有在Build的時候才會執行自動打包圖集。
Edit - Project Setting - Editor
默認為下圖設置:

我們修改為:

一直啟用Sprite Packer,這樣我們在編輯器環境下也可以使用自動打包圖集。
再來運行看下:

嗯?還是7個Drawcall,Unity 坑我們?
其實不是,仔細再想下,上面提到了 Packing Tag 這個參數,是么有設置的。

既然沒有設置 Packing Tag,那Unity應該不知道怎么去打包圖集……,因為沒有名字嘛。
我們給這7個圖片設置一個名字,例如 test,然后保存Apply,再次運行測試

為什么有兩個?Unity坑我們呢!!
其實不是,是因為這7張圖片,有一張圖片我放到了 Resources文件夾里面,上面就說道,Resources中的圖片Unity是不會打包的哦!
那么Unity把我們的小圖片打包到哪里去了,找不到呀,被吃了嗎?我想再看一眼效果怎么辦!
在Unity菜單的Window中有一個 Sprite Packer,我們打開它

在這里就可以看到打包的圖集。
左邊紅框是圖集名字,也就是我們設置的 Packing Tag 。
第二個是打包的方式,默認打包,還有一種是緊湊型打包 ,兩種方式沒啥大區別。上面這7張圖片用Texturepacker打包后只有512x512大小,但是用Unity的Sprite Packer打包后是1024x512 ……這讓人很不解。
