Unity网格重建
什么是网格重建(Mesh Rebuild)
在 UGUI 中,如果要渲染一个 UI 元素(Image,Text 等),需要经过 CPU 阶段将渲染所需要数据如:顶点,位置,纹理等信息传递给 GPU 进行渲染。在运行时,UI 元素外观或布局发生变化时,UGUI 会重新计算这些数据并传递给 GPU,这个过程称为网格重建(Mesh Rebuild)。
为什么会造成网格重建
每个 UI 元素会维护自己的 Mesh 信息,但是 Mesh 信息并不是实时更新的,Unity 在 UI 元素发生必须要重建 Mesh 信息的情况下才会进行网格重建。比如:
- 文本内容修改:Text.text or TextMeshProUGUI.text 发生变化
- 图像资源修改:Image.sprite, RawImage.texture 发生变化
- 颜色修改:Image.color, Text.color 发生变化
- …
如何避免或减少网格重建
- 拆分 Canvas - 动静分离
例如一个 Image 元素在 Simple 模式下会创建四个顶点,如果我们有 100 个相同的这样的 Image,UGUI 底层(Native Code 部分)会将这 100 个 Image 的 Mesh 信息合并成一个大的 Mesh,用同一个 DrawCall 发送给 CPU。但是,UI 的 Mesh 信息相对于普通的 Mesh 来说有一个很大的不同,就是 UI 的 Mesh 信息是会变化的,而一旦某个 UI 元素的 Mesh 信息发生修改,那么和这个元素合并在一批的整个 Mesh 都会变成不可用。
如果将动态的 UI 元素单独分离到不同的 Canvas 中,由于 UGUI 渲染时以 Canvas 为单位的,那么这些动态的 UI 元素就不会影响到静态的 UI 元素了。
参考链接
Unity网格重建
https://lshgame.com/2025/04/30/Unity_Mesh_Rebuild/