NGUI讨论群:333417608
方法一:
提供一个脚本。放在粒子上。
调整相应的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;
- }
- }
- }