天天看點

NGUI與粒子遮擋解決方法

轉載自: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); }
}
           

将腳本挂在粒子上

繼續閱讀