返回「计算机、信息技术与工程」
Unity 3D场景UI被打断合批的原因?
本文目录 3 个章节
Unity 3D场景UI被打断合批的原因?
note · 我的 UWA 问答 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者;回答保留当时语境,技术结论可能受 Unity 版本、平台和项目条件限制。
问题


如上图,使用SpriteRenderer做图片和TextMeshPro做文字,使用unity帧调试器查看,发现第一排三个图片动态合批了,第二排三个图片动态合批了,第三排三个图片动态合批了,然后文字都合不了批,原因是动态批处理在player Settings 中被关闭或在当前环境中被暂时禁用,以避免z-fighting。能不能所有图片一个批次,所有文字一个批次,该怎么做?
- 提问者:cwf
- 提问时间:2021-04-09 00:54:07
我的回答
- 对于普通的Mesh物体的绘制,也就是使用MeshRenderer绘制的Mesh:在开启了动态合批的情况下,使用相同Material的两个物体,以相邻顺序绘制时,如果满足其他动态合批的条件,即可合批。
题主的文字部分没有合批,是因为没有开启动态合批。看FrameDebugger,题主的渲染管线使用的是SRP,开启动态合批的方式是在RenderPipelineAsset的Inspector面板的Advanced下勾选Dynamic Batching。

至于说为什么图片出现了合批现象,这是因为图片使用SpriteRenderer来绘制,其网格是Unity动态生成的,合批的行为也是Unity内部处理的,不受Dynamic Batching开启与否的影响。
- 其次是控制渲染顺序,使应该合批的物体以相邻顺序渲染,先绘制所有图片,再绘制所有文字。
方法一:按照楼上说的,设置Order in Layer,图片的Order in Layer设置为0,文字为1。

方法二:将所有图片的RenderQueue都设置为3000,将所有文字的Render Queue都设置为3001。


效果如下:


- 回答时间:2021-04-09 21:10:00
- 最后更新:2021-04-09 21:10:00
- 采纳状态:已采纳
来源与关系
- 上位集合:我的 UWA 问答
- UWA 标签:UI、渲染模块
- 原始问题:Unity 3D场景UI被打断合批的原因?
- 源页最后更新:2021-04-09 21:10:00