您的位置:首页 > 产品设计 > UI/UE

NGUI与粒子遮挡解决方法

2015-05-25 23:32 323 查看
转载自: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); }
}

将脚本挂在粒子上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d