1. 概述
本文档对Unity GUI 批次合并(Batching)源码(基于Unity 4.6版本源码)进行研究,总结UGUI Batching的规则,并提供UI优化建议,以及UI层级显示辅助工具使用说明。
2. UGUI Batching规则分析
UGUI以Canvas为单位进行批次生成和渲染,Canvas可以嵌套包含Canvas。
Batching的生成和合并在canvas::Update里:
Batching主要流程如下:
1)计算Canvas alpha,包括父Canvas和嵌套Canvas(alpha=0不生成及合并批次)。
2)UI层次结构发生变化时,更新Batch顺序,对Canvas下所有UI元素(Canvas renderer)按UI层次结构深度优先排序,生成UI Instructions。
注意1 Mask:其中有mask UI会增加两个UI Instructions(mask / unmask),且不能合并(最终增加两个drawcall,分别使用Increment / Decrement mask Material Instance)。Mask实际上是前后使用或移除Stencil mask(来做像素剔除),在之间画所有子UI元素,mask UI下的子UI元素也无法与mask UI 之外的UI元素合并批次。
注意2更新:UI层次结构发生变化(orderIsDirty),新增、删除UI或UI子节点都