可以通过Frame debugger查看每个drawcall绘制了哪些东西
本文测试环境:unity2018.2.9f1,基于Unity Editor (PC平台)
网格更新机制
Cavans.SendWillRenderCanvas
m_LayoutRebuildQueue
m_GraphicRebuildQueue
Canvas.BuildBatch 更新所有DrawCall
WaitingForJob 子线程网格合并
PutGeometryJobFence
BatchRendere.Flush UI如果开多线程渲染,BatChRender.Flush会增高,主线程在等待子线程的结果时Flush会等待。
哪些因素的改变会引起合批
从源码中可以看到,这些数据的改变会引起合批
源码地址: UI / UnityEngine.UI / UI / Core / Utility / VertexHelper.cs
private List m_Positions = ListPool.Get();//顶点位置的拷贝或指定新顶点位置的数组
private List m_Colors = ListPool.Get();//颜色
private List m_Uv0S = ListPool.Get();//基本纹理坐标
private List m_Uv1S = ListPool.Get();//第二套纹理坐标
private List m_Uv2S = ListPool.Get();//第三套纹理坐标
private List m_Uv3S = ListPool.Get();private List m_Normals = ListPool.Get();