且行且珍惜
1语婴、NGUI圖集的使用裂问。
在使用NGUI制作界面時(shí)瞒爬,圖集的選用是一個(gè)關(guān)鍵,因?yàn)樗苯雨P(guān)系到了drawcall的數(shù)量膏执。最好就是自始至終都只使用同一個(gè)圖集中的元素,這樣的話露久,在界面制作上drawcall的消耗就只會(huì)受到Panel的劃分以及字體與圖集的混合使用這兩部分的影響更米。
在制作圖集時(shí),可以分為兩個(gè)制作方向毫痕。一是以NGUI自帶的某一圖集為基礎(chǔ)征峦,將自己需要使用的元素添加到該圖集中迟几。這樣做的好處是可以在界面制作時(shí)使用NGUI提供的一些元素。再一個(gè)方向就是制作一個(gè)全新的圖集栏笆。這適合于對(duì)界面進(jìn)行整體設(shè)計(jì)的情況类腮,全部的界面元素都進(jìn)行重新設(shè)計(jì),然后制作成圖集來(lái)使用蛉加。
另外蚜枢,在使用NGUI自帶的圖集時(shí),要注意在該圖集的副本上進(jìn)行新元素的添加针饥、刪除操作厂抽,避免對(duì)NGUI自身造成不必要的影響。
2打厘、界面元素深度的設(shè)置與drawcall的控制修肠。
在使用NGUI制作界面時(shí),如果我們自始至終都使用唯一的圖集户盯,界面上的文字使用動(dòng)態(tài)字體制作嵌施,那么drawcall的消耗數(shù)量就只與Panel的劃分以及同一個(gè)Panel下圖集元素與字體元素的深度設(shè)置排列有關(guān)了。
我們知道莽鸭,在NGUI中吗伤,它消耗的drawcall是以每個(gè)Panel為獨(dú)立計(jì)算單位進(jìn)行計(jì)算的。所以我們只要把一個(gè)Panel下的drawcall計(jì)算方式搞明白硫眨,然后再對(duì)Panel的劃分加以控制足淆,就能都達(dá)到有效控制drawcall的目的了。
在同一個(gè)Panel之下礁阁,如果所有的界面元素都使用同一個(gè)圖集來(lái)制作巧号,而且沒有動(dòng)態(tài)字體的“干擾”,那么該P(yáng)anel消耗的drawcall數(shù)量就是1姥闭。這可以通過鼠標(biāo)選中UIPanel的游戲?qū)ο髞?lái)查看drawcall的使用情況丹鸿,如圖所示(只消耗了1個(gè)drawcall)
還是在同一個(gè)Panel之下,如果在圖集使用過程中棚品,還配合使用了動(dòng)態(tài)字體靠欢,或是使用了不同的圖集,那么該P(yáng)anel下drawcall的計(jì)算就和其下元素的深度設(shè)置密切相關(guān)了铜跑。一句話總結(jié)就是:為同一圖集的元素設(shè)置一段獨(dú)立的深度值區(qū)間门怪,不同的圖集元素或動(dòng)態(tài)字體使用不同的深度值區(qū)間,盡量不要穿插锅纺。舉例說(shuō)明:
> 在同一個(gè)Panel之下掷空,假設(shè)
深度值區(qū)間 (-200, -100),圖集1元素使用拣帽;
深度值區(qū)間(-100疼电, 0),圖集2元素使用减拭;
深度值區(qū)間(0, 100)区丑,圖集3元素使用拧粪;
深度值區(qū)間(100, 200)沧侥,圖集4元素使用可霎;
>按照上述情況計(jì)算,該P(yáng)anel的drawcall值為4宴杀。但是癣朗,如果我們?cè)谑褂脮r(shí),不同的圖集或動(dòng)態(tài)字體的深度值出現(xiàn)了穿插旺罢,那么drawcall會(huì)出現(xiàn)猛增的情況旷余,因?yàn)檫@里的drawcall計(jì)算方式是在使用的整個(gè)深度區(qū)間上,每遇到一個(gè)不同的圖集扁达,drawcall就會(huì)加1正卧,不論該圖集之前是否使用過,與此沒有關(guān)系跪解,都會(huì)加1炉旷。這就要求我們,在不影響功能實(shí)現(xiàn)的前提之下叉讥,對(duì)界面元素的深度值進(jìn)行合理的排布設(shè)置窘行。
3、動(dòng)態(tài)字體的使用图仓。
把字體也融入到圖集之中罐盔,字體圖集,將所有使用到的文字處理成一張圖片進(jìn)行使用透绩,比較適合英語(yǔ)國(guó)家, 但是如果這么做翘骂,那么drawcall的消耗數(shù)量就又能降低不少了,相當(dāng)于從使用兩個(gè)圖集變成只使用一個(gè)圖集帚豪。
最后,此文轉(zhuǎn)自: http://blog.csdn.net/Haohan_Meng/article/details/38307901, 感謝總結(jié).