UGUI中相同材质相同Shader相同贴图的UI元素可以合并DrawCall。
1.使用图集
Unity性能优化---使用SpriteAtlas创建图集进行批次优化_unity2021.3.33 spriteatlas优化-CSDN博客
2.Canvas的子物体在场景树中的索引位置和不同图集不影响UI合批且UI网格没有重叠,如下图:
如上图调用了三次绘制,两个图集两个DrawCall,两个文字一个DrawCall。
注:场景树中不管UI组件是Canvas的子物体还是UI组件的子物体,都是按照从Canvas的深度优先计算depth的。
3.如果不同图集UI的mesh相交,Depth小的会打断Depth大图集的合批,被打断的Depth大的组件相同图集的会合并为一个DrawCall。注:下图中的数字代表深度
注:上述所提的深度可以在EventSystem中查看
注:depth就是graphic中的depth,
这个depth就是相对根Canvas的绝对深度。
4.相同图集UI的Mesh相交或者文字的Mesh相交不会影响UI合批,文字组件的字不一样不会影响UI的合批。
相同图集的一个mesh,文字一个mesh
6.如果文字与非文字组件Mesh相交,会打断文字的合批,若放在depth大于文字Image上还会打断图集的合批。
7.半屏幕的背景图单独使用一个Canvas可以避免因UI的mesh相交而打断合批。
因为UI元素不会全在背景图的网格之内,而背景图片depth又比较小,所以它会影响depth比较大的UI合批。
如果将背景图片添加Canvas组件之后
因为不同Canvas不会进行合批计算,所以这样就避免了背景图片打断合批的操作。
上述是从Unity中实测而来,后续遇到其他还会补充 ,如有不对的地方欢迎评论告诉我。