Unity內(nèi)存優(yōu)化培訓(xùn)之圖集優(yōu)化:在游戲開發(fā)的過程中,我們難免會(huì)遇到某個(gè)UI界面加載卡頓,或者安裝包太大的問題,那么今天我們就來講一下如何優(yōu)化NGUI的圖集,降低內(nèi)存,降低游戲的安裝包大小。
首先我們選擇一些小圖片,使用我們平常的方式來打一張1024X1024大小的圖集,如下圖:
圖片的格式設(shè)置如上圖紅色箭頭指示,最后一個(gè)箭頭顯示了在ARGB32位的格式下圖片的大小為4MB,接下來我們?cè)诳纯从螒蜻\(yùn)行的時(shí)候這張圖片占的內(nèi)存空間,我們先在場(chǎng)景中隨便創(chuàng)建一個(gè)Sprite,如下圖:
接下來,點(diǎn)擊菜單“Window—->Profiler”打開性能監(jiān)控窗口,點(diǎn)擊左側(cè)“Memory”,運(yùn)行游戲,如下圖:
根據(jù)上面的這幅圖片,大家可以發(fā)現(xiàn)這個(gè)圖集的貼圖占的內(nèi)存空間為8MB,如果我們?cè)谟螒蛑行枰虞d一個(gè)界面,這個(gè)界面中包含多個(gè)圖集的話,有可能會(huì)造成卡頓,所以我們要想辦法在保證圖片質(zhì)量的前提下,降低圖片內(nèi)存,經(jīng)過前面很多項(xiàng)目的采坑,最終發(fā)現(xiàn)在安卓手機(jī)上使用ETC 4格式壓縮圖片是最佳選擇。
但是ETC4是不支持Alpha通道的,那么我們就要考慮一下有沒有其他手段來解決這個(gè)問題。
對(duì)于這個(gè)問題,現(xiàn)在用的比較多的方法就是Alpha通道剝離。原理就是使用代碼把原圖片的RGBA四個(gè)通道的數(shù)值讀取出來,然后把RGB值和Alpha值分別存在不同的兩張圖片中,最后再用Shader對(duì)這兩張圖片分別進(jìn)行采樣,讀取里面的RGB值和另一張圖片的Alpha值,進(jìn)行合并,輸出顏色。
下面就來實(shí)際操作一下。首先介紹一個(gè)工具,可以把原圖片剝離為一張帶有RGB通道的圖片和一張帶有Alpha通道的圖片,下面,no code no bi bi,直接上代碼:(PS:代碼關(guān)鍵部分已經(jīng)注釋)
這個(gè)是剝離工具,代碼寫好保存完畢之后放入“Editor”目錄下,然后點(diǎn)擊菜單欄“Tools—->Texture—–>AlphaPeel”,點(diǎn)擊之前一定要選中圖片,并且保證圖片的可讀寫開關(guān)處于開啟狀態(tài)。如圖:
執(zhí)行過之后大家會(huì)發(fā)現(xiàn)原來的圖片路徑中多出了兩張圖片,如圖:
圖中MainAtlas是原圖片,下面的兩張圖就是我們剛才輸出的,接下來我們需要修改一個(gè)NGUI自帶的Shader代碼,把這兩張圖片合并起來。大家可以看一下上圖中第一個(gè)資源,是我們?cè)趧?chuàng)建圖集的時(shí)候自動(dòng)生成的材質(zhì),我們選中這個(gè)材質(zhì),看一下它用的是哪個(gè)Shader,如圖:
在圖中我們可以看到該材質(zhì)用的是名字為“Transparent Colored”的Shader,NGUI的所有圖集的材質(zhì)用的都是這個(gè)Shader,并且我們可以看到剛才我們創(chuàng)建的圖集貼圖也賦在這個(gè)材質(zhì)上,所以我們要修改這個(gè)Shader把我們剛才創(chuàng)建的兩張圖片重新合并。下面在Unity資源搜索欄里輸入Shader名稱,打開搜到的第一個(gè)Shader,然后我們把這個(gè)Shader改成如下圖所示:
代碼修改部分已經(jīng)注釋,78行以后的代碼不用修改。修改后保存,接下來就讓我們見證奇跡吧!
回到Unity檢視面板,會(huì)發(fā)現(xiàn)材質(zhì)那里讓我們放進(jìn)去兩張圖片,如圖:
我們把剛才生成的RGB圖片和Alpha圖片分別拖入第一個(gè)圖片位置和第二個(gè)圖片位置,如圖:
下面我們?cè)俅_定一下剛才生成的兩張圖片的格式設(shè)置:
兩張圖片都要按照上面的格式去設(shè)置,設(shè)置完成之后大家可以看一下最下面那個(gè)箭頭顯示的圖片大小,0.5M,這樣兩張圖片合起來是1M比原來小了3/4,驚不驚喜,意不意外!
下面我們來看一下實(shí)際效果:
圖片的清晰度幾乎和剛開始的時(shí)候一樣,接下來我們看一下Profiler里面的數(shù)值:
兩張圖片占的內(nèi)存分別為1MB兩個(gè)加起來為2MB,原來是8MB現(xiàn)在是2MB減少3/4。
在實(shí)際開發(fā)中大小圖集有幾十個(gè),使用這種方式可以讓我們的安裝包大小減少100MB左右,效果還是比較顯著的,并且也可以減少運(yùn)行內(nèi)存的壓力,另外Unity中所有圖片資源都可以使用這種方式來優(yōu)化。以上就是Unity內(nèi)存優(yōu)化培訓(xùn)之圖集優(yōu)化的全部內(nèi)容,希望可以給大家?guī)硪恍﹩l(fā)。