总体性能——UI模块性能

来源:互联网 发布:淘宝卖 阿里进货 知乎 编辑:程序博客网 时间:2024/06/03 12:48

目录(?)[+]

NGUI:



如何定位:

UIRect.UpdateUIWidget很多的时候,开销比较高;

UI模块或屏幕进行缓存,当缓存时,有大量UI在屏幕外边,虽然降低了UIPanel.LateUpdate,但UIRect.Update(下面有UIWidget)每帧都会更新位置,这个开销非常高)

UIRect.Update一般是非常低,否则说明UI缓存非常多;

 

如何定位UI切换是否合理?

— 不推荐通过Instantiate/DestroyActive/Deactive来频繁切换UI界面;

UICamera.Update:处理Click点击(UI界面的切换),比如打开背包或任务系统等;

UIRect.Start:一般在Instantiate UI界面时被触发,若是通过Active/Deactive触发,就不会看到UIRect.Start,只会看到UICamera.Update

(使用NGUI开发时,UIRect.Start应尽可能少,否则说明UI界面在频繁进行Instantiate/Destroy操作)

 

注:对于频繁切换的复杂界面,比如背包、任务系统面板,应该移到视锥体外、或者把其Scale变为0,改变CameraLayer(层级)进行切换;

三种方法的优劣:

1:移到视锥体外;(要把上面的脚本或动画等关闭,移出去后,其上面的UIWidgetUpdate仍在进行)(复杂的可以移出去,不复杂的就不需要,比如:血条等就不需要)

2:其Scale变为0;(Drawcall还是存在的)

3:改变CameraLayer(层级)进行切换;(最快,且切换没有任何副作用,但CameraLayer只有32个,会占用Layer层的个数)


UGUI:


Canvas.BuildBatch:表示在重建网格(动静没有分离或变换了一些参数);

 

如何定位Mesh重建是否合理?

1:动态元素和静态元素分离



表情会引起整个网格的重构;

 

2:合理配置UI Canvas/Panel

(一个Canvas下的widget不宜过多,除非能够做到完全的动静分离,一般别超过1000个顶点)


有的游戏中主城界面用NGUI,打斗界面用UGUI的原因:

UGUIBuildBatch时几乎没有堆内存,而使用NGUI时,堆内存开销很高;

打斗时经常会有飘血或飘字,会导致UI.LateUpdate在持续地开销,即UIMesh在进行持续地重建;(如果能用一个尽量用一个,UGUI的性能远大于NGUI


推荐文章链接:

1:如何读懂UWA性能报告?—NGUI篇

2:如何读懂UWA性能报告?—UGUI篇


原创粉丝点击