重要概念
- Canvas Batch:Canvas下的UI元素最终都会被Batch到同一个Mesh中,而在Batch前,会根据这些UI元素的材质(通常就是Atlas)以及渲染顺序进行重排,在不改变渲染结果的前提下,尽可能将相同材质的UI元素合并在同一个SubMesh中,从而把DrawCall降到最低。Batch的结果会被缓存复用,知道这个Canvas被标记为dirty.
- Unity官方的重要提示:当给定Canvas上的任何可绘制UI元素发生更改时,Canvas必须重新执行合批过程。此过程重新分析Canvas上的每个可绘制UI元素,不管它是否被修改。注意:更改是指影响UI元素外观的任何变动,包括修改sprite、transform的Position 和Scale、文本网格的text等等。
- Canvas嵌套:Canvas可以嵌套使用,一个子Canvas下dirty的子物体不会触发父Canvas的rebuild
网格重建因素
UI顶点属性变化会引发网格更新
- 修改Image、Text的Color属性会改变顶点的颜色UIVertex.color
- 修改RectTransform的Size、Anchor、Pivot等,会改变顶点的位置UIVertex.position
- 注意:在UGUI中颜色的变化是通过修改顶点色实现的,避免生成了新的DrawCall
- 注意:UIVertex.position记录的是本地空间下的坐标
网格重建流程图: