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