最近给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<ParticleSystem>();
if (particles != null)
{
foreach (ParticleSystem myParticles in particles)
{
ChangeRendererSetting(myParticles.renderer);
}
}
if (IsChangeAllRenderers)
{
Renderer[] renderers = GetComponentsInChildren<Renderer>();
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();
}
}