UGUI優化總結


1.檢查空Image

游戲中許多時候會使用一個透明的Image組件來監聽點擊事件或者屏蔽Image后面的按鈕事件,空的Image可以解決這個問題,用起來也很方便,但是空的Image照舊會參與繪制,從而產生overdraw。解決辦法是擴展Graphic組件來替換Image組件。

游戲中使用工具檢查空Image: 對應prefab上Image組件的Sprite為空或Color.a透明(<0.05f),我們將使用了空Image的prefab列出來手動進行替換。監聽事件時還會使用一個Button或者EventTrigger來實現,這種需着重檢查。工具見末尾鏈接地址。

2.優化九宮格Image

九宮格圖像使用的也比較多,Image選為Sliced類型后會有一個fillCenter選項,默認情況下該選項是勾選的,但如果九宮格的中間區域為透明圖像,其實不需要勾選fillCenter,從而降低overdraw。所以我們需要使用工具檢測該Image的sprite的中心區域

是否為透明,將透明的prefab列出來供檢查。

3.檢查Mask組件

Mask組件也會被用到,最多是用在ScrollView中,網上也有很多資料介紹Mask組件會產生額外的兩個drawcall,而大部分時候Mask都是矩形的,所以其實可以使用RectMask2D組件來替換掉Mask組件,官方也比較推薦RectMask2D組件,

但如果你的Mask組件不是矩形的那么就不能替換。

4.檢查錯誤透明材質

項目中有很多材質美術設置有些問題,從而影響性能,其中一個就是Material所使用的紋理是RGB格式或者雖然RGBA格式但是A通道為1,但是美術卻給使用了一個透明的Shader進行渲染,這種設置雖不會出錯但是會影響性能。所以我們需要檢測出

renderType為Transparent或者TransparentCutout類型,並且他的renderQueue>2000(2000為Geometry)且<=3000(3000為Transparent)的材質,如果他的主紋理不透明,則列舉出使用了這種材質的prefab或者Scene,以便檢查。

5.錯誤的UI設置

之前在檢查一個UI合批失效的問題,明明打了圖集,但就是不能合批,很是詫異,經過測試發現如果你的Image組件pos.z不為零或者rota.x或rota.y不為零,那么會被當作3DUI從而不參與合批,增加drawcall,而這些非零值有時往往是不需要甚至是

不注意被設置上的,但卻影響了這個合批,很是坑人。所以需要用工具檢查這種被設置錯誤的UI,酌情進行重置。

 

工具地址:https://gitee.com/planefight/Tools.git

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM