此文章可以解决以下相关问题:
解决粒子特效被NGUI遮挡的问题
unity 2d 和 NGUI layer
------------------------
方法3 比较好用哦!
UIWidget 是指要被放置特效的 的NGUI 元素
-------------
高能注意:
有两种修改renderQueue的方法,结果是不同的.
Renderer render;
render.material;
render.sharedMaterial;
第一种不改变 资源文件. 不会影响到其他 公用一个资源的表现.(据说有存在内存泄漏)
第二种 在Editor模式下(游戏模式下估计也会吧?)会修改资源文件,并且所有使用此资源的对象都会受影响.
#if UNITY_EDITOR
return
render
.
material
;
#else
return
render
.
sharedMaterial
;
#endif
用这段代码来保证不对本地资源修改. 在游戏时则共享材质修改.
具体看:
http://blog.csdn.net/z9895512/article/details/47610427
------------
方法一:
提供一个脚本。放在粒子上。
调整相应的renderQueue使粒子显示在UI前面。如果有些UI需要显示在粒子前面,记得修改相应UI的renderQueue。
- 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)
方法三:
(感谢穆斯提供脚本)
- 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;
- }
- }
- }