本文作者從自身多年的Unity項(xiàng)目UI開發(fā)及優(yōu)化的經(jīng)驗(yàn)出發(fā),從UGUI,CPU,GPU以及unity特有資源等幾個(gè)維度,介紹了unity手游性能優(yōu)化的一些方法。

 


在之前的文章《手游內(nèi)存占用過(guò)高?如何快速定位手游內(nèi)存問題》中提到,Mono內(nèi)存和native內(nèi)存是PSS內(nèi)存主要的組成部分,mono內(nèi)存更多的起到內(nèi)存調(diào)用的功能,因此常常成為了開發(fā)人員優(yōu)化內(nèi)存的起點(diǎn);而在游戲的其他的進(jìn)程中,同樣有很多因素影響著游戲的性能表現(xiàn)。本文將從UGUI的優(yōu)化角度,介紹unity游戲性能優(yōu)化的一些內(nèi)容。

 

一、UGUI簡(jiǎn)介

UGUI是Unity官方推出的UI系統(tǒng),集成了所見即所得的UI解決方案, 其功能豐富并且使用簡(jiǎn)單,同時(shí)其源代碼也是開放的,下載地址:https://bitbucket.org/Unity-Technologies/ui/src

 

相比于NGUI,UGUI有以下幾個(gè)優(yōu)點(diǎn):

1. 所見即所得的編輯方式,在Scene窗口中即可編輯。

2. 智能的Sprite packer可以將圖片按tag自動(dòng)生成圖集而無(wú)需人工維護(hù),生成的圖集合并方式比較合理,無(wú)冗余資源。

3. 渲染順序與GameObject的Hierarchy順序相關(guān),靠近根節(jié)點(diǎn)顯示在底層,而靠近葉子節(jié)點(diǎn)顯示在頂層;這樣的渲染方式使得調(diào)整UI的層級(jí)比較方便和直觀。

4. RectTranForm及錨點(diǎn)系統(tǒng)更適合于2D平面布局,并且非常方便多分辨率屏幕自適配。

 

二、UI制作規(guī)范和指導(dǎo)方法

本文是關(guān)于UGUI優(yōu)化的,或許你會(huì)覺得UI的制作規(guī)范及指導(dǎo)方法與優(yōu)化無(wú)關(guān),其實(shí)很多性能問題往往是資源的不合理使用造成的,比如使用了尺寸過(guò)大的圖片、引用了過(guò)多的圖集以及加載了不必要的資源等。如果從設(shè)計(jì)和制作UI一開始就遵守特定的規(guī)范,則可以規(guī)避不必要的性能開銷。筆者根據(jù)參與的多個(gè)項(xiàng)目總結(jié)了以下幾點(diǎn)通用的規(guī)范和指導(dǎo)方法(這些規(guī)范適用于所有項(xiàng)目,不管你使用UGUI還是NGUI)。

 

1. 合理的分配圖集

合理的分配圖集可以降低drawcall和資源加載速度;具體細(xì)節(jié)如下:

● 同一個(gè)UI界面的圖片盡可能放到一個(gè)圖集中,這樣可以盡可能的降低drawcall。

 

● 共用的圖片放到一個(gè)或幾共享的圖集中,例如通用的彈框和按鈕等;相同功能的圖片放到一個(gè)圖集中, 例如裝備圖標(biāo)和英雄頭像等;這樣可以降低切換界面的加載速度。

 

● 不同格式的圖片分別放到不同的圖集中,例如透明(帶Alpha)和不透明(不帶Alpha)的圖片,這樣可以減少圖片的存儲(chǔ)空間和占用內(nèi)存。(UGUI的sprite packer會(huì)自動(dòng)處理這種情況)

 

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式