Mesh Renderer与Sprite Renderer不遵循sorting order排序问题求解
解决方案
你可以按以下步骤操作实现Sorting Order控制渲染顺序:
- 首先确保Mesh Renderer的Sorting Order配置生效:Mesh Renderer默认不在Inspector面板暴露Sorting Order字段,你可以选择两种方式配置:
- 给Mesh Renderer挂载
Sorting Group组件,直接在组件上设置Sorting Order为0 - 运行时通过代码直接赋值
MeshRenderer.sortingOrder = 0,参数可正常生效
- 给Mesh Renderer挂载
- 修改自定义Sprite Shader,在SubShader块中添加
ZTest Always配置,强制忽略深度检测,只要Sprite后渲染就会覆盖之前的像素内容,修改后的Shader参数示例:
Lighting Off Cull Off ZWrite Off ZTest Always BlendOp [_OpColor] Blend [_SrcFactor] [_DstFactor]
- 确认两个材质的Render Queue数值完全一致:Unity只会对同Render Queue的物体按Sorting Order排序。内置Mobile Unlit Shader默认Render Queue为2000(Geometry队列),你可以将自定义Sprite Shader的Queue设置为相同数值,例如在SubShader块第一行添加
Tags { "Queue" = "Geometry" } - 如果不需要多物体灵活排序,也可以直接将Sprite的Render Queue设置为比模型高1,无需修改Sorting Order即可保证Sprite始终在模型前方渲染
内容的提问来源于stack exchange,提问作者Tai Wu
相关产品推荐
相关产品推荐

