NGUI中使用U3D粒子特效

using UnityEngine;
using System.Collections;

/// <summary>
/// This is a container to deal with the particles render by control the render queue.
/// </summary>
[ExecuteInEditMode]
public class UIParticles : MonoBehaviour
{
    private const float UPDATE_RENDER_TIME = 0.2f;
    private float lastTime = 0f;
    private Renderer[] rendererArray = null;
    private bool isWidgetOK = false;
    private bool isRendererArrayOK = false;
    private Renderer tempMeshRenderer = null;

    public bool isExplicit = false;
    public int RenderQueue = 3000;
    public UIWidget parentWidget = null;
    public bool IsForward = true;

    void OnDestroy()
    {
        rendererArray = null;
        parentWidget = null;
    }

    void LateUpdate()
    {
        lastTime += Time.deltaTime;
        if (lastTime < UPDATE_RENDER_TIME)
            return;
        lastTime = -Random.Range(0, UPDATE_RENDER_TIME);

        if (parentWidget == null)
        {
            parentWidget = NGUITools.FindInParents<UIWidget>(this.gameObject);
        }

        if (rendererArray == null || rendererArray.Length == 0)
        {
            rendererArray = this.GetComponentsInChildren<Renderer>(true);
        }

        isWidgetOK = parentWidget != null && parentWidget.drawCall != null;
        isRendererArrayOK = rendererArray != null && rendererArray.Length > 0;

        if ((isWidgetOK || isExplicit) && (isRendererArrayOK))
        {
            OnChangeRenderQueue();
        }
    }

    void OnChangeRenderQueue()
    {
        int curRenderQueue = (isExplicit || !isWidgetOK) ? RenderQueue : parentWidget.drawCall.finalRenderQueue;

        if (IsForward)
            curRenderQueue += 1;
        else
            curRenderQueue -= 1;

        if (curRenderQueue != RenderQueue)
        {
            RenderQueue = curRenderQueue;
            for (int i = 0; i != rendererArray.Length; ++i)
            {
                tempMeshRenderer = rendererArray[i];
                if (tempMeshRenderer != null)
                {
#if UNITY_EDITOR
                    tempMeshRenderer.sharedMaterial.renderQueue = RenderQueue;
#else
                    tempMeshRenderer.material.renderQueue = RenderQueue;
#endif
                }
            }
        }
    }
}



一般NGUI结合U3D粒子特效结合使用有两种方式,一种使用多个摄像机,一种改变渲染队列。


通过改变渲染队列实现。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值