Unity特效与UI遮挡的问题

Unity特效与UI遮挡的问题

最近给UI添加粒子特效时,总是被UI遮挡。因为粒子系统的渲染顺序列默认为3000,而NGUI的渲染顺序默认也是从3000开始,当有嵌套的panel时或者Depth更高的panel时,GUI的渲染顺序会高于3000。

解决办法是:
1.修改NGUI中的UIPanel脚本中的默认的RenderQueue, 调整到3000以下,这样就不会遮挡住粒子特效了,当有的窗口需要显示在特效上面时,在检视面板中把该窗口的Renderer Q选项调整为Start At,值为3000以上,就可以解决。
2.使用另外一个摄像机,显示特效。但是在UI窗口相互切换时,不太好控制。
3.修改粒子特效的Shader中的RendererQueue值。

下面给出第三种方法的代码参考:

using UnityEngine;
using System.Collections;

public class ChangeParticleSysRenderQueue : MonoBehaviour
{
    public bool setRenderQueue;         //是否设置粒子的RenderQueue
	public int  effectRendererQueue;     //粒子RenderQueue的大小

	public bool IsChangeAllRenderers = false;

	private void ChangeEffectRender()
	{
		ParticleSystem[] particles = GetComponentsInChildren();
		if (particles != null)
		{
            foreach (ParticleSystem myParticles in particles)
			{
                ChangeRendererSetting(myParticles.renderer);
			}
		}

		if (IsChangeAllRenderers)
		{
			Renderer[] renderers = GetComponentsInChildren();
			if (renderers != null)
			{
				foreach (var myRenderer in renderers)
				{
                    ChangeRendererSetting(myRenderer);
				}
			}
		}
	}

	private void ChangeRendererSetting(Renderer render)
	{
		if (render == null)
		{
			Debug.LogWarning("------>null.");
			return;
		}
        if (setRenderQueue)
		{
            render.material.renderQueue = effectRendererQueue;
		}
	}

	void OnEnable () 
	{
	    ChangeEffectRender();
	}
}

====================================================================================
结束。

你可能感兴趣的:(Unity特效与UI遮挡的问题)