unity

UGUI及NGUI实现粒子夹层渲染

2017-02-23  本文已影响1112人  Levi_Wan

我们在开发中,经常会遇见粒子,Mesh,Spine等在渲染的时候会被UI层给挡住从而无法达到理想的体验效果。现在我们来解决这些问题并实现夹层效果:

UGUI:

效果图:

Paste_Image.png

我们可以看见粒子渲染在Pink的Image之上而在Green的Image下。实现了夹层效果。

技术实现
  核心:通过脚本修改Canvas中的Order in layer。

Paste_Image.png Paste_Image.png Paste_Image.png
NGUI:

NGUI也是基于MVC架构开发的插件。

Paste_Image.png

三种解决方案:

NGUI在渲染时,UIWidget会在LateUpdate中调用NGUI的UIDrawCall来完成渲染,我们可以通过自写代码,将我们需要渲染的Mesh,粒子等加入NGUI的Renderer Queue就能完成最完善的夹层渲染解决方案。(最佳方案)

 using UnityEngine;
 using System.Collections;
 
 public class RenderQueueModifier : MonoBehaviour {


public UIPanel m_panel;
public UIWidget m_target;
public bool isForSpine = true;



public Renderer renderer;
void Awake() {

        renderer = GetComponent<Renderer>();

}


void OnEnable() {
    AddToPanel();
}
public void Set(UIPanel m_panel, UIWidget m_target, bool isForSpine) 
{
    this.m_panel = m_panel;
    this.m_target = m_target;
    this.isForSpine = isForSpine;
    AddToPanel();
}

void AddToPanel() {
    if (m_panel != null) m_panel.renderQueueModifiers.Add(this);
}

void OnDisable() {
    
    m_panel.renderQueueModifiers.Remove(this);
}





int lasetQueue = int.MinValue;


public void setQueue(int queue)
{
    if (this.lasetQueue != queue) {
        this.lasetQueue = queue;

            renderer.material.renderQueue = this.lasetQueue;
    }
}
 }
上一篇下一篇

猜你喜欢

热点阅读