最近给unity3d NGUI粒子特效时被遮挡,为了解决这个问题,我找了相关资料,有两种方法可以解决,现在我们来了解一下这两种方法。

解决方法一:

因为粒子系统的渲染顺序列默认为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值。

解决方法二:

  1. using UnityEngine;
  2. using System.Collections;
  3. [ExecuteInEditMode]
  4. public class ControlParticle : MonoBehaviour {
  5. public int renderQueue = 30000;
  6. public bool runOnlyOnce = false;
  7. void Start()
  8. {
  9. Update();
  10. }
  11. void Update()
  12. {
  13. if (renderer != null && renderer.sharedMaterial != null)
  14. {
  15. renderer.sharedMaterial.renderQueue = renderQueue;
  16. }
  17. if (runOnlyOnce && Application.isPlaying)
  18. {
  19. this.enabled = false;
  20. }
  21. }
  22. }