UGUI和NGUI的优化分享
学习资料
来自UWA的分享,针对于Unity 4.x 及5.3 以下版本,Unity5.5及更高版本可能适用。
文章:UWA技术直播视频集锦 UGUI &NGUI http://blog.uwa4d.com/archives/video_UI.html
视频:UWA直播回顾| UGUI性能优化技巧 https://v.qq.com/x/page/r0329jx2ijw.html
其它:https://zhuanlan.zhihu.com/p/24265362
NGUI
1. (动静分离)动态的UI:添加在UIPanel下,减少每次重建时的消耗,把UIPanel下的内容做的尽量简单
2. 不要让depth 穿插在两个DrawCall之间
CPU的消耗时间(ms),查看峰值 ,重点关注在战斗场景中,假如在主城或者切换场景时,UI的部分峰值卡是可以接受的,但如果在战斗场景中UI模块消耗大量的CPU就不应该,应该一帧一帧地排查。
Font(FontCache),动态字体,尽量做成静态字体。
UICamera.CreateVBO
UGUI
布局
父级绑定的
1. ContentSizeFilter
2. Horizontal Layout Group
Grid上绑定的
LayoutElement 中的Preferred Width
UGUI优化的几个方面
- DrawCall
- OverDraw
- 事件检测
- 网格重建
DrawCall
渲染顺序:根据Hierarchy中的顺序来渲染,越往下越在前
合并规则:
Mask 尽量减少
重叠会产生DrawCall ! 尽量不要出现重叠,常见于背包,排列多的情景下 。
OverDraw
移动端的GPU消耗
如何查看? 在Scene视图中,可以选择Overdraw,如下图所示
当图片的中心是空白的,但图片却占用比较大的面积。
Image的Image Type= Sliced时,去掉 Fill Center
OverDrawTracking 脚本
Unity 5.X的OverDraw优化
UGUI 降低填充率技巧两则 http://blog.uwa4d.com/archives/fillrate.html
事件检测
不需要事件检测的UI,可以去掉 (Raycast Target) ,比如非Button类的Image和Label
EventSystem.Update
网格重建
动态元素放在另外的Canvas下,减少rebuild
对CPU的耗时
Camera.Render
Graphics.PresentAndSync
Animator.Update
Canvas.BuildBatch (合并的Mesh需要改变时所产生的调用,全部UI都在一个Canvas,应该分离)
Canvas.SendWillRenderCanvas(UI元素自身发生变化所产生的调用)
其它
查看UI的顶点数
Profiler - Memory - Not Save - Mesh - BuildBatch
Canvas 中的Pixel Perfect 关闭
资源
Frozen UI for UGUI https://www.assetstore.unity3d.com/en/#!/content/39582
一套UI组件库,包含较多现成的UI界面资源