轉載自:http://www.taidous.com/thread-2272-1-1.html
最近給UI添加粒子特效時,總是被UI遮擋, 解決方法是: 因為粒子系統的渲染順序列預設為3000,而NGUI的渲染順序預設也是從3000開始,當有嵌套的panel時或者Depth更高的panel時,GUI的渲染順序會高于3000, 解決辦法是, 1.修改Ngui中的UIPanel腳本中的預設的RenderQueue, 調整到3000以下,這樣就不會遮擋住粒子特效了,當有的視窗需要顯示在特效上面時,在檢視面闆中把該視窗的Renderer Q選項調整為Start At,值為3000以上,就可以解決,不過我的NGUI版本為3.1.6,是以可以直接調整。 2.使用另外一個錄影機,顯示特效。但是在UI視窗互相切換時,不太好控制。 3.修改粒子特效的Shader中的RendererQueue值。 |
代碼:
using UnityEngine;
public class SetRenderQueue : MonoBehaviour
{
public int renderQueue = 3000;
Material mMat;
void Start ()
{
Renderer ren = renderer;
if (ren == null)
{
ParticleSystem sys = GetComponent<ParticleSystem>();
if (sys != null) ren = sys.renderer;
}
if (ren != null)
{
mMat = new Material(ren.sharedMaterial);
mMat.renderQueue = renderQueue;
ren.material = mMat;
}
}
void OnDestroy () { if (mMat != null) Destroy(mMat); }
}
或者
using UnityEngine;
public class SetRenderQueue : MonoBehaviour
{
public int renderQueue = 3000;
Material mMat;
void Start ()
{
Renderer ren = renderer;
if (ren == null)
{
ParticleSystem sys = GetComponent<ParticleSystem>();
if (sys != null) ren = sys.renderer;
}
if (ren != null)
{
mMat = new Material(ren.sharedMaterial);
mMat.renderQueue = renderQueue;
ren.material = mMat;
}
}
void OnDestroy () { if (mMat != null) Destroy(mMat); }
}
将腳本挂在粒子上