UGUI性能消耗调研

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

一条评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注