返回「计算机、信息技术与工程」

Unity 3D场景UI被打断合批的原因?

更多
Markdown 结构化数据
本文目录 3 个章节

Unity 3D场景UI被打断合批的原因?

note · 我的 UWA 问答 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者;回答保留当时语境,技术结论可能受 Unity 版本、平台和项目条件限制。

问题

动态合批被打断.png

动态合批被打断2.png

如上图,使用SpriteRenderer做图片和TextMeshPro做文字,使用unity帧调试器查看,发现第一排三个图片动态合批了,第二排三个图片动态合批了,第三排三个图片动态合批了,然后文字都合不了批,原因是动态批处理在player Settings 中被关闭或在当前环境中被暂时禁用,以避免z-fighting。能不能所有图片一个批次,所有文字一个批次,该怎么做?

  • 提问者:cwf
  • 提问时间:2021-04-09 00:54:07

我的回答

  1. 对于普通的Mesh物体的绘制,也就是使用MeshRenderer绘制的Mesh:在开启了动态合批的情况下,使用相同Material的两个物体,以相邻顺序绘制时,如果满足其他动态合批的条件,即可合批。

题主的文字部分没有合批,是因为没有开启动态合批。看FrameDebugger,题主的渲染管线使用的是SRP,开启动态合批的方式是在RenderPipelineAsset的Inspector面板的Advanced下勾选Dynamic Batching。

image.png

至于说为什么图片出现了合批现象,这是因为图片使用SpriteRenderer来绘制,其网格是Unity动态生成的,合批的行为也是Unity内部处理的,不受Dynamic Batching开启与否的影响。

  1. 其次是控制渲染顺序,使应该合批的物体以相邻顺序渲染,先绘制所有图片,再绘制所有文字。

方法一:按照楼上说的,设置Order in Layer,图片的Order in Layer设置为0,文字为1。

image.png

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

image.png

image.png

效果如下:

image.png

image.png

  • 回答时间:2021-04-09 21:10:00
  • 最后更新:2021-04-09 21:10:00
  • 采纳状态:已采纳

来源与关系