UGUI性能消耗调研
没之后的文章写的详细 算简单的调研 仅供参考
参考文献
https://zhuanlan.zhihu.com/p/108259045
https://zhuanlan.zhihu.com/p/437704772
https://zhuanlan.zhihu.com/p/343978391
https://blog.csdn.net/PS_show/article/details/100525280
https://blog.csdn.net/salvare/article/details/82468713
性能消耗的关键点
Rebatch
对mesh的操作 发生在C++层
指Canvas分析UI节点生成最优批次的过程
节点数量过多会导致耗时较长
Canvas中包含的mesh发生改变时就会触发
例如SetActive transform的改变 颜色改变文本改变等
每个Canvas独立处理 互不影响
在unity5.2之后改用多线程 大大减少了主线程的压力
但是该做的优化还是要做的
ReBuild
对material和layout的操作
例如Layout组件调整RectTransform尺寸
Graphic组件更新材质 Mask执行Cull等
Rebatch的针对性优化
减少Canvas下的顶点数量
对于Image首选Simple模式 其次是Sliced模式且不勾选FillCenter
Text用TextMeshPro代替 如果一定要用 尽量避免使用Shadow和Outline
减少重新计算的顶点数量(动静分离)
会发生变化的UI部分放到一个Canvas下面
不会发生变化的UI部分放到另一个Canvas下面
但要注意Canvas的数量不能太多 否则会增加DrawCall
ReBuild的针对性优化
少用Layout 简单的布局RectTransform代替
Canvas动静分离
UnityProfiler数据分析
Canvas.BuildBatch
Canvas.UpdateBatches
如果这两项占用比较大 最好要做Canvas的拆分
Canvas.SendWillRenderCanvases
这一项如果占用较大 Graphic的重构可能有问题
如果每一帧都在执行 证明动静分离的部分没有做好
WillRenderCanvas/IndexedSet_Sort
CanvasUpdateRegistry_SortLayoutList
考虑使用RectTransform替代Layout
Text_OnPopulateMesh
Shadow_ModifyMesh
Outline_ModifyMesh
考虑换掉或者优化Text
一条评论