Unity GUI优化
1.概念同一Canves下满足合批规则的多个UI元素的网格数据合并到一个顶点缓冲区仅用一个DrawCall提交GPU渲染。2.合批条件处在同一Canves下共享同一个图集或相同贴图以及相同的材质实例注相同Shader的不同材质实例也不会合批。VisiableList元素相邻连续且Depth相同不被穿插3.合批流程按照Hierarchy窗口的层级做深度优先搜索确定基础的渲染顺序层级越考上越优先渲染计算各元素的Depth。注不渲染activefalse、alpha0、完全在裁剪区域外 -1且不参与合批没相交 0相交网格重叠的话二者相同材质实例与同一图集相同贴图则两者相等不可以的话在另一个元素上面的depth需要在另一个基础上 1。按照Depthmat IDtexture IDRenderer OrderInspector面板的顺序顺序从小到大排序得到VisiableList。注在计算Depth时其实就已经在考虑材质与纹理了此时比较是在depth相同的情况下。依次检查这个列表的相邻元素看他们是否满足合批条件。4.优化方案动静分离动态与静态UI使用不同Canves多个Canves的会打断合批但减少网格重建所需时间同时动态的元素还有可能破坏VisiableList从而增加合批。注Text与Image分离依然有意义将两种纹理不同的UI元素各自挂载两个Canves。Text与Image穿插会导致合批中断。避免UI元素过多与层级复杂影响合批速度。文本最好用TextMeshPro或者图片减少Mask组件使用增加2个DrawCall隔离合批空间使用图集5.重建概念CPU计算网格UI元素的RectTransfrom尺寸与锚点变化视觉元素的改变都会使得同一Canves下的所有元素网格重建。注Unity将网格重建放在子线程上执行使其重建的消耗减少因此Unity官方不需要使用多个Canves。