在游戏渲染的过程中,我非常想知道哪些Node合并到了一个批次里面,unity自带的profiler就提供了类似的功能,主要是针对UI
场景搭建,因为是针对UI的,所以必须得有一个Canvas
场景里面一共4个节点,预期的drawcall应该是2个
打开unity profiler窗口
顺着箭头的思路我们看下怎么观察profiler数据
这里我选择的是playmode模式下进行profile,当然你也可以直接在editor模式下,
在左侧的profile module
里面找到UI Details
,如果感觉不好找,可以过滤下展示的module
在UI Details
的时间轴里面选中任意的时刻,在最下面的详细数据里面就会展示对应的profile详情
可以看到一共是2个绘制批次,双击或者右键就能看到这次合批绘制对应的game object
,并且非常直观的在hierarchy
和scene
中选中对应的game object
Batch Breaking Reason
描述了导致一个新的batch的原因,常见的
- 不与画布共面 (Not Coplanar With Canvas) :批处理需要对象的矩形变换与画布共面(未旋转)。
- 画布注入索引 (CanvasInjectionIndex) :CanvasGroup 组件存在并强制新建批次,例如在其余部分上显示一个组合框的下拉列表时。
- 不同的材质实例、矩形裁剪、纹理、A8 纹理用法 (Different Material Instance, Rect clipping, Texture, or A8TextureUsage) :Unity 只能将具有相同材质、遮罩、纹理和纹理 Alpha 通道用法的对象一起进行处理。
GameObject Count
参与此次合批的游戏对象数量
GameObjects
本次合批对应的游戏对象
合批细节
同样的节点排序结构,如果相互之间没有重叠,在渲染时也会自动优化合批逻辑,非常极致的优化。