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

NGUI 粒子显示在上级

2014-10-31 19:29 239 查看
http://bbs.taikr.com/thread-2272-1-1.html

【NGUI】3.0+版本,粒子在UI后面显示

2014-09-09 19:08 48人阅读 评论(0) 收藏 举报
【Unity3D】【NGUI】3.0+版本,粒子在UI后面显示
分类: Unity3D NGUI2013-12-23 12:34 1606人阅读 评论(0) 收藏 举报
unity3dngui脚本技巧
NGUI讨论群:333417608
方法一:
提供一个脚本。放在粒子上。
调整相应的renderQueue使粒子显示在UI前面。如果有些UI需要显示在粒子前面,记得修改相应UI的renderQueue。

[csharp] view plaincopy
using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class SZUIRenderQueue : MonoBehaviour {

public int renderQueue = 3000;
public bool runOnlyOnce = false;

void Start()
{
Update();
}

void Update()
{
if (renderer != null && renderer.sharedMaterial != null)
{
renderer.sharedMaterial.renderQueue = renderQueue;
}
if (runOnlyOnce && Application.isPlaying)
{
this.enabled = false;
}
}
}

方法二:
去官方下载粒子的Shader,之后手动在Shader里面修改RenderQueue。 http://unity3d.com/unity/download/archive  (Built-in shaders)

方法三:
(感谢穆斯提供脚本)
[csharp] view plaincopy
using UnityEngine;

[ExecuteInEditMode]
class SZUIRenderQueueToWidget : MonoBehaviour
{
public UIWidget widget;
public int rendererQOffset = 3000;
public bool runOnlyOnce = false;

void Update()
{
Renderer r = renderer;

if (widget == null)
{
widget = GetComponent<UIWidget>();
}

if (widget != null && widget.drawCall != null && r != null)
{
int targetQ = widget.drawCall.renderQueue + rendererQOffset;
if (targetQ > 0)
{
r.sharedMaterial.renderQueue = targetQ;
}
}
if (runOnlyOnce && Application.isPlaying)
{
this.enabled = false;
}
}
}


最近给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值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: