Allows you to set the render order for objects to avoid transparent sort issues. JS version has been extended to allow an option to affect all children of a GameObject but removes the option to affect materials other than sharedMaterial, as that was not necessary in my project. Feel free to modify.
Notes
c#
using UnityEngine; using System.Collections; [AddComponentMenu("Effects/SetRenderQueue")] [RequireComponent(typeof(Renderer))] public class SetRenderQueue : MonoBehaviour { public int queue = 1; public int[] queues; protected void Start() { if (!renderer || !renderer.sharedMaterial || queues == null) return; renderer.sharedMaterial.renderQueue = queue; for (int i = 0; i < queues.Length && i < renderer.sharedMaterials.Length; i++) renderer.sharedMaterials[i].renderQueue = queues[i]; } }
js
var queue : int = 3000; //3000 is default in Unity var applyToChildren : boolean = false; function Awake(){ SetRenderQueue(); } function SetRenderQueue(){ if (!renderer || !renderer.sharedMaterial || applyToChildren){ if(applyToChildren){ for(var child : Transform in transform){ child.renderer.sharedMaterial.renderQueue = queue; } } else { print("No renderer found on this GameObject. Check the applyToChildren box to apply settings to children"); } } else {renderer.sharedMaterial.renderQueue = queue;} }
保持每个使用的shader有自己独立的材质球,相同材质球会排序无效
其他参考:
*http://jakobknudsen.wordpress.com/2013/07/20/transparency-and-sorting/
*http://aras-p.info/texts/VertexShaderTnL.html
*http://wiki.unity3d.com/index.php?title=SetRenderQueue
*http://docs.unity3d.com/Manual/SL-AlphaTest.html
*http://www.visualizationlibrary.org/documentation/pag_guide_polygon_depth_sorting.html