zoukankan      html  css  js  c++  java
  • NGUI 粒子显示在上级

    http://bbs.taikr.com/thread-2272-1-1.html

    【NGUI】3.0+版本,粒子在UI后面显示

    2014-09-09 19:08 48人阅读 评论(0) 收藏 举报
    【Unity3D】【NGUI】3.0+版本,粒子在UI后面显示
    分类: Unity3D NGUI2013-12-23 12:34 1606人阅读 评论(0) 收藏 举报
    unity3dngui脚本技巧
    NGUI讨论群:333417608
    方法一:
    提供一个脚本。放在粒子上。
    调整相应的renderQueue使粒子显示在UI前面。如果有些UI需要显示在粒子前面,记得修改相应UI的renderQueue。
    
    [csharp] view plaincopy
    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)
    
    方法三:
    (感谢穆斯提供脚本)
    [csharp] view plaincopy
    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;    
            }    
        }  
    }  

    最近给UI添加粒子特效时,总是被UI遮挡,

    解决方法是:

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

  • 相关阅读:
    IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
    mysql 存储过程 循环
    Mysql 遇到过的自带函数使用
    Mysql:is not allowed to connect to this MySQL server
    mysql 删除或更新时出现 you are usering safe update model 的解决方案
    将一个服务器的表数据插入到另一个服务器的表中
    C#操作Excel无法删除worksheet解决方案
    安装MongoDB数据库的注意事项
    Python爬取小猪短租,用的是lxml解析器
    使用Python爬取腾讯房产的新闻,用的Python库:requests 、re、time、BeautifulSoup ​​​​
  • 原文地址:https://www.cnblogs.com/123ing/p/4065829.html
Copyright © 2011-2022 走看看