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