# UGUI优化 - HUD刷新 - 可以在代码逻辑中做一定的延迟 - 颜色不同导致无法合批 - 可以用MaterialPropertyBlock解决 - UGUI的shader中虽然有顶点颜色,但是却从来没有使用过,提交顶点颜色也依赖CanvasRender,无法使用顶点色 - Canvas下**网格的变化**会引起**Canvas.BuildBatch的调用** - 減少Canvas下网格顶点的变换,例如UI元素的**Transform变动** - 合并批次 - **无法合批**的情况 - 不同Canvas|图集交叉|深度交叉 - 同一个Canvas,同一图集深度,但无法合批的情况 - **动态合批未通过:超过顶点限制,缩放不为1** - 对于Alpha为0的Image,需要勾选其CanvasRender组件上的Cull Transparent Mesh选项,否则依然会产生DrawCall且容易打断合批。 - FGUI的处理方式 - 自动合并相邻组件 - UGUI无法做到的原因是因为依赖底层的动态合并以及静态合并,但FGUI只处理UI - 顶点数据重组 - 将多个组件的顶点UV颜色数据合并到单个顶点缓冲区,一次性提交到GPU - 文本处理: - 将某几个字的纹理和图片的纹理打到同一个图集 - 动态变更字体的时候,往图集里更新新的字体,避免发生材质重建 - 颗粒度不同 - UGUI的Canvas下元素被设置Dirty后会导致整个CanvasReBuild - FGUI的局部更新更高效 ## 改变颜色是否能合批的本质原因 - UGUI 将颜色存储在材质属性层级 + FGUI 将颜色存储在顶点数据层级 ## FGUI的字体与图片合批 - FGUI的字体图片合批 本质是Texture2DArray,字体纹理与图集纹理形成 - 字符纹理生成 - 与动态图集差不多 - 申请一张512\*512的贴图 - 如果动态图集里没有这个字的图,调用系统字体渲染API - 写入数据兵返回uv顶点数据