NGUI:
如何定位:
UIRect.Update:UIWidget很多的时候,开销比较高;
(UI模块或屏幕进行缓存,当缓存时,有大量UI在屏幕外边,虽然降低了UIPanel.LateUpdate,但UIRect.Update(下面有UIWidget)每帧都会更新位置,这个开销非常高)
UIRect.Update一般是非常低,否则说明UI缓存非常多;
如何定位UI切换是否合理?
— 不推荐通过Instantiate/Destroy或Active/Deactive来频繁切换UI界面;
UICamera.Update:处理Click点击(UI界面的切换),比如打开背包或任务系统等;
UIRect.Start:一般在Instantiate UI界面时被触发,若是通过Active/Deactive触发,就不会看到UIRect.Start,只会看到UICamera.Update;
(使用NGUI开发时,UIRect.Start应尽可能少,否则说明UI界面在频繁进行Instantiate/Destroy操作)
注:对于频繁切换的复杂界面,比如背包、任务系统面板,应该移到视锥体外、或者把其Scale变为0,改变Camera的Layer(层级)进行切换;
三种方法的优劣:
1:移到视锥体外;(要把上面的脚本或动画等关闭,移出去后,其上面的UIWidget。Update仍在进行)(复杂的可以移出去,不复杂的就不需要,比如:血条等就不需要)
2:其Scale变为0;(Drawcall还是存在的)
3:改变Camera的Layer(层级)进行切换;(最快,且切换没有任何副作用,但Camera的Layer只有32个,会占用Layer层的个数)
Canvas.BuildBatch:表示在重建网格(动静没有分离或变换了一些参数);
如何定位Mesh重建是否合理?
1:动态元素和静态元素分离
表情会引起整个网格的重构;
2:合理配置UI Canvas/Panel
(一个Canvas下的widget不宜过多,除非能够做到完全的动静分离,一般别超过1000个顶点)
有的游戏中主城界面用NGUI,打斗界面用UGUI的原因:
UGUI在BuildBatch时几乎没有堆内存,而使用NGUI时,堆内存开销很高;
打斗时经常会有飘血或飘字,会导致UI.LateUpdate在持续地开销,即UIMesh在进行持续地重建;(如果能用一个尽量用一个,UGUI的性能远大于NGUI)
推荐文章链接: