渲染排序

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

  • The default transparent queue is 3000.
  • Lower queues will be rendered first, higher ones later.
  • This change will affect the shared material, so you have to make separate materials for separate render queues.
  • In the editor, this change will persist across runs. However, the scripts still need to be attached to the correct objects in a build in order to work there.

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

posted @ 2014-06-21 20:11  softimagewht  阅读(705)  评论(0编辑  收藏  举报