UGUI會自動檢測優化,如果多個材質間沒有遮擋或只有小部分不影響的遮擋則會合並DrawCall為一個。如下圖:
- 盡可能保證Text在Image的上方。字體的DrawCall就可能自動會優化,而不需要像NGUI那樣讓字體跟圖片pack在一起來減少DrawCall。
- 盡可能保證Image之間不存在不必要的重疊。
UI變色:修改材質和修改頂點色兩種方式
- 合並DrawCall一定要是相同的材質,修改材質會將本來已合並的DrawCall分離開,就導致了DrawCall的增加及Canvas的重建。
- 修改頂點色(Button中Transition中的ColorTint方式)只會修改Canvas中的數據。
UI邊框:Sliced & Fill Center
- Sliced模式的Sprite更節省紋理尺寸。
- 中空的邊框不應該勾選Fill Center,可減小Fill rate。
Mask的代價,通過Stencil buffer實現
- 移動平台需要Use 24-bit Depth Buffer(Tegra GPU 2、3上不支持,4支持)。
- Mask中的UI元素無法與其他batch,從而增加DrawCall。
- 可以的話嘗試用Filled Sprite代替。
動畫:Text vs Image
- 如果Image上做了動畫則Canvas需要重建,Image的頂點數一般不會很多,開銷不會很大。
- Text與文本內容(生成的網格數)相關,如果文字比較多則相比Image開銷可能會翻倍。
Canvas的重建主要就是為了合並DrawCall,可以將有動畫的文字放在單獨的Canvas中去,手動分離DrawCall(增加DrawCall)后就不會再要去跟別的文字作合並,該Canvas就不需要再重建故減少了重建開銷。
盡可能使用緩沖池。如人物身上的傷害數字,生成時會有較大的開銷因為有Mesh的生成等過程。
unity官網對性能優化的建議,干貨,比較實用,建議都看一下:https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-optimizing-unity-ui?playlist=30089
翻譯:
http://www.manew.com/home.php?mod=space&uid=105915&do=thread&view=me&from=space
以上鏈接中的系列文章:UI 優化指南,UNITY UI 基本原理, Unity UI分析工具, 填充率,畫布和輸入, 優化UI控件, 其他的UI優化技術和技巧。