Unity3D粒子系统被2D的NGUI或者UGUI遮挡的问题

今天研究了一下粒子系统和2D UI(主要是NGUI和UGUI)的层级遮挡问题,在网上也差了很多资料,各种类型的都有,自己也尝试了一下, 发现还是有很多坑在等着,为此,就把遇到的问题和解决的方法一起分享给大家。

网上的解决办法有三种(并且推荐第一种方法):

  1. 修改NGUI中的UIPanel脚本中的默认的RenderQueue, 调整到3000以下,这样就不会遮挡住粒子特效了;否则,改为3000以上,就会遮挡到粒子特效了;
  2. 使用另外的一个摄像机来渲染粒子特效,缺点是UI窗口切换时,不易控制;
  3. 更改粒子特效的Shader中的RendererQueue值。

一、粒子系统和NGUI

我们要做的是两个UI图片中间夹有粒子效果,我尝试了第一种方法来实践,具体方法步骤如下(看图):

场景布局:

新手注意,上图场景中只有一个NGUI的正交相机,也就是说,粒子特效所在的Layer是用UI层相机渲染的,不要入坑;

上图中UI下面新建了两个UIPanel,每个Panel下有一张Sprite图;

下面我们对UIPanel进行修改:

具体操作是:找到对应图片的父级UIPanel,找到Adcanced Options选项,下面的Render Q,选中下拉框中的第二个选项(Unity5.2.2)Start At,将后面的值改为小于3000,我是改为了3001,此时,上图中PanelA下对应的Sprite2图片是遮挡了粒子效果;要让图片显示在粒子效果之下,同理,修改上面的Start At 的值小于3000即可,我在本例中是修改为了2999;

二、粒子系统和UGUI

对于粒子效果和UGUI的遮挡显示问题,我同样的是做了一个粒子效果夹在两张UI图中间的示例,下面让我们一起来探讨一下。

先看一下效果:

上图中Canvas下有两个Image控件和一个ParticleSystem粒子特效,绿色图片是ImageA,红色的是ImageB,红色的是粒子效果,上图已经展示出二手域名出售粒子特效夹在两张UI图片的中间。

对于Canvas,我们修改Render Mode 为Screen Space - Camera,下面的Render Camera使用主相机,并且保证Sorting Layer 为 Default、 Order in Sorting 值为 0,如图所示:

ImageA和ImageB在颜色上做了区分之后。此时在ImageB上挂载脚本UIDepth.cs(这里是参考雨松MOMO的博客),并修改属性值Order为2,如图所示:

注意:ImageA上并没有挂UIDepth脚本,目的是让其Order In Layer值继承父级Canvas的Order In Layer值,即值为0。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class UIDepth : MonoBehaviour {
	public int order;
	public bool isUI = true;
	void Start () {
		if(isUI) {
			Canvas canvas = GetComponent<Canvas>();
			if( canvas == null){
				canvas = gameObject.AddComponent<Canvas>();
			}
			canvas.overrideSorting = true;
			canvas.sortingOrder = order;
		} else {
			Renderer []renders  =  GetComponentsInChildren<Renderer>();
			foreach(Renderer render in renders){
				render.sortingOrder = order;
			}
		}
	}
}

下面我们修改ParticleSystem的属性值,不再啰嗦,直接上图:

此时粒子系统的Order In Layer 值设置为2;在此回想一下,ImageA的Order值继承Canvas的,值为0,ImageB的Order值,是通过脚本来设置的,值为2;感觉有点不对劲,还有东西没说清楚,但是这样实现了我们想要的效果;

还没有结束,我后面又测试一下,发现图片A、图片B和粒子系统的Order In Layer值相同的时候,粒子效果总是处在最下面;值都不同的时候,值最大的处在最前面。并且此时Hierarchy面板中的图片上下顺序关系造成的遮挡效果也会失效了,个人猜想,应该是渲染的优先级Order in Layer更高一些,后面有空在继续验证

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NGUI(Newton Game Dynamics Integration)和UGUIUnity UI)是Unity引擎中两种不同的UI系统。它们的主要区别在于设计目的、灵活性和更新时间线上。 1. **NGUI**:最初由Tasharen Entertainment开发,专注于游戏内交互界面,尤其是在2D游戏中表现优秀。它提供了一个简单直观的拖拽式UI编辑器,支持丰富的事件处理和组件系统。NGUIUnity 5之前是一个独立的包,但现在已经整合到Unity的标准库中,作为Legacy UI的一部分。 2. **UGUI**:是UnityUnity 5开始引入的新一代UI系统,是为2D和3D游戏设计的现代UI解决方案。它采用数据驱动的属性系统,提供了更高级的组件和布局选项,以及响应式设计,支持自适应布局。UGUI更加灵活,可以无缝集成到项目中,并且更容易进行性能优化。 **主要区别:** - **技术栈**:NGUI使用的是脚本组件系统,而UGUI是基于数据驱动的,支持更现代化的编程模型。 - **组件和事件**:UGUI提供了更多的组件类型和内置事件系统,使得设计更复杂交互界面更方便。 - **性能**:随着技术的发展,UGUI通常被认为在性能上优于NGUI,尤其是在大型场景和复杂交互时。 - **学习曲线**:对于新手来说,UGUI可能学习起来更快,因为它有直观的可视化编辑工具。 **相关问题**: 1. NGUI适合哪种类型的项目? 2. UGUI的响应式设计是如何工作的? 3. 如何在Unity项目中切换NGUI和UGUI

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值