问题
- 物体莫名出现在奇怪的渲染深度(depth)上
- Layer的顺序被忽略(例如Sprite Renderer)
原因
出现这种情况可能有以下几种原因:
- 使用Editor脚本或Runtime脚本修改了材质的renderQueue值。这个材质可能会被复制,在其他工程重用。但材质会误认为其RenderQueue与着色器(Shader)的Renderqueue数值一致。例如:gameObject.GetComponent<Renderer>().sharedMaterial.renderQueue = 2000;
- 在旧版本的Unity(1.3之前,更多信息见下方),为材质分配新的着色器并不会重置材质的RenderQueue。
解决方案
重设材质的RenderQueue使其匹配着色器的RenderQueue。
下面的Editor脚本将会扫描工程中的所有材质,并将它们的RenderQueue与着色器相匹配。
using UnityEditor; using UnityEngine; public class ResetMaterialsRenderQueue { [MenuItem ("Assets/Reset Materials RenderQueue")] static void DoResetMaterialsRenderQueue() { Material[] materials = (Material[])Resources.FindObjectsOfTypeAll(typeof(Material)); int materialsLength = materials.Length; for (int i = 0; i < materialsLength; ++i) { if (materials[i].shader != null) { materials[i].renderQueue = materials[i].shader.renderQueue; } } } }
更多信息
5.1.3更新日志-图形:在材质检视器中更改着色器时会重置材质的RenderQueue。
Further Instructions
- Download the file below
- Unzip into Assets/Editor folder
- In Unity Editor, go to Assets and select Reset Materials RenderQueue