轉自http://blog.csdn.net/highning0007/article/details/37991193
方法一:
提供一個腳本。放在粒子上。
調整相應的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;
- }
- }
- }