NGUI 减少Draw Call
1、NGUI圖集的使用。
?
圖集,直接關系到了drawcall的數量。最好就是自始至終都只使用同一個圖集中的元素,在界面制作上drawcall的消耗就只會受到Panel的劃分以及字體與圖集的混合使用這兩部分的影響。
?
在制作圖集時,可以分為兩個制作方向。一是以NGUI自帶的某一圖集為基礎,將自己需要使用的元素添加到該圖集中。這樣做的好處是可以在界面制作時使用NGUI提供的一些元素。
再一個方向就是制作一個全新的圖集。這適合于對界面進行整體設計的情況,全部的界面元素都進行重新設計,然后制作成圖集來使用。
?
另外,在使用NGUI自帶的圖集時,要注意在該圖集的副本上進行新元素的添加、刪除操作,避免對NGUI自身造成不必要的影響。
?
2、界面元素深度的設置與drawcall的控制。
?
在使用NGUI制作界面時,如果我們自始至終都使用唯一的圖集,界面上的文字使用動態字體制作,
?
那么drawcall的消耗數量就只與Panel的劃分以及同一個Panel下圖集元素與字體元素的深度設置排列有關了。
?
我們知道,在NGUI中,它消耗的drawcall是以每個Panel為獨立計算單位進行計算的。所以我們只要把一個Panel下的drawcall計算方式搞明白,然后再對Panel的劃分加以控制,就能都達到有效控制drawcall的目的了。
?
在同一個Panel之下,如果所有的界面元素都使用同一個圖集來制作,而且沒有動態字體的"干擾",那么該Panel消耗的drawcall數量就是1。這可以通過鼠標選中UIPanel的游戲對象來查看drawcall的使用情況
?
?
還是在同一個Panel之下,如果在圖集使用過程中,還配合使用了動態字體,或是使用了不同的圖集,那么該Panel下drawcall的計算就和其下元素的深度設置密切相關了。
?
一句話總結就是:為同一圖集的元素設置一段獨立的深度值區間,不同的圖集元素或動態字體使用不同的深度值區間,盡量不要穿插。舉例說明:
?
在同一個Panel之下,假設
?
深度值區間 (-200, -100),圖集1元素使用;
?
深度值區間(-100, 0),圖集2元素使用;
?
深度值區間(0, 100),圖集3元素使用;
?
深度值區間(100, 200),圖集4元素使用;
?
按照上述情況計算,該Panel的drawcall值為4。但是,如果我們在使用時,不同的圖集或動態字體的深度值出現了穿插,那么drawcall會出現猛增的情況,因為這里的drawcall計算方式是在使用的整個深度區間上,每遇到一個不同的圖集,drawcall就會加1,不論該圖集之前是否使用過,與此沒有關系,都會加1。這就要求我們,在不影響功能實現的前提之下,對界面元素的深度值進行合理的排布設置。
?
?
3、動態字體的使用。
?
就是把字體也融入到圖集之中,就像NGUI使用的方式那樣。那么drawcall的消耗數量就又能降低不少了,相當于從使用兩個圖集變成只使用一個圖集。
?
總結
以上是生活随笔為你收集整理的NGUI 减少Draw Call的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3D游戏开发之使用SVN对Un
- 下一篇: (部分伪)面向对象视频笔记