前端為啥不用wordpress網(wǎng)站關(guān)鍵詞優(yōu)化公司哪家好
原理:UGUI 是基于Canvas來進行合并計算的
1.不同Cavans的UI元素,是無法合批渲染,無法實現(xiàn)同一個drawcall
2.?每次合批的時候,會合并計算Canvas下所有的UI元素 , 具體流程:
Step1: 對Cavans下所有的UI元素進行合批計算
Step2: 每幀將合并后的結(jié)果提交給GPU渲染
Step3: 當某個UI元素改變以后,先計算某個UI元素改變后的數(shù)據(jù),再結(jié)合其它UI元素,重新合批 (即:某個UI變動,導致mesh重建,全部重新合批計算)
3.?每次UI元素的位置等相關(guān)信息改變,都會引發(fā)重新合批計算
4. 靜止不動的UI的合批計算開銷最小,如果Cavans下所有的UI元素一旦創(chuàng)建都不再改變,則只會產(chǎn)生一個合批計算,性能最好
5.當Cavans下有不斷變化的物體時,每次都會重新進行合批計算,此時不動的物體少,那么最后合批的時候物體的數(shù)據(jù)就少
由上面的分析,就得到一個結(jié)論: 動靜分離,將不變的物體放一個canvas下, 變化的物體放一個canvas下,優(yōu)化合并時候的開銷
因此很多人就推導出一個結(jié)論: 每個界面一個Cavans,減少Mesh合并的開銷
但是事實并非如此
基于多Canvas的”動靜分離”會打亂合批,能節(jié)省的是合并時不變的元素的數(shù)據(jù)copy
Unity UGUI 會基于Canvas將能合并的UI元素,計算合并到一起,然后再提交給GPU渲染來節(jié)約Drawcall
在這個過程中,如果某個UI元素改變了,就會引發(fā)一次合并計算。
”動靜分離”一般指的是把那些不經(jīng)常動的UI與經(jīng)常動的2D元素分成不同的Cavans,來減少合并時候的開銷。這個通常叫做”動靜分離”。
我們在開發(fā)項目的時候,會把經(jīng)常變化的游戲元素(2D游戲角色,玩家昵稱,玩家血條等)做到一個Cavans下,把通常的游戲操作UI界面做一個Cavans下,對于那些UI內(nèi)容非常多的如”任務(wù)滾動列表”等,我們也會考慮單獨做一個Cavans,然后持續(xù)監(jiān)測UI性能即可
一般項目中2~3個Cavans就可以了,還是要把重點放在UI的drawcall優(yōu)化上