UGUI中显示粒子特效
今天在UGUI上显示粒子特效的时候遇到的一些问题,Mark一下。原理:修改特效中每一个ParticleSystem的Layer为UI,并且把ParticleSystemRenderer.sortingOrder值设置为大于Canvas中的sortingOrder值。其实就是控制两个组件
的Render Order。
1. 在UI控件上(eg: Image)显示一个粒子特效
1).首先创建一个Canvas,RenderMode = Screen Space-Camera ,然后创建一个UICamera ,参数设置为:Clear Flags: Depth Only; Culling Mask : UI;
然后把这个UICamera设置为Canvas的RenderCamera。如下图:

2). 添加一个粒子特效预设Boom到Image1下面,我们需要在Image1上显示粒子效果。然后我们需要对这个Boom特效的中的粒子系统设置对应的sortingOrder为1
添加一个脚本UIEffectPlayer.cs到这个go上,它会递归遍历这个预设上的所有子对象,分别设置它们的sortingOrder和所属Layer。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class UIEffectPlayer : MonoBehaviour { // Use this for initialization
void Awake()
{
if (gameObject.GetComponent<RectTransform>() == null)
{
RectTransform rt = gameObject.AddComponent<RectTransform>();
rt.anchorMin = Vector3.zero;
rt.anchorMax = Vector3.zero;
rt.anchoredPosition = new Vector2(, );
} //设置所有的粒子特效的Layer为UI,把粒子系统的Render的sortingOrder设置为大于Canvas的OrderInLayer
//Canvas的Order In Layer默认为0,所以这里默认设置为1
SetLayerAndSortOrder(gameObject.transform,,);
} void SetLayerAndSortOrder(Transform parent,int layer,int sortOrder)
{
parent.gameObject.layer = layer;
ParticleSystem ps = parent.GetComponent<ParticleSystem>();
if (ps != null)
{
ParticleSystemRenderer psRender = gameObject.GetComponent<ParticleSystemRenderer>();
if(psRender != null)
{
psRender.sortingOrder = sortOrder;
}
} foreach(Transform child in parent)
{
SetLayerAndSortOrder(child, layer,sortOrder);
}
}
void Start () { } // Update is called once per frame
void Update () { }
}
3).运行游戏即可看见特效显示在Image1上面。

2. 如果需要在两个UI层之间显示特效怎么办?(特效Boom显示在图片Image1和Image2之间)
很容易想到的办法是新创建一个Canvas,(这个Canvas类似NGUI中的UIPanel)将其sortingOrder的值设置为大于粒子系统的sortingOrder的值,然后将Image2放到Canvas2下面进行绘制。
效果如下:

可以看到Boom特效显示在Image1和Image2之间了,Image2显示为半透明。好像还有别的办法不用新建一个Canvas,
后续试试再写进去。欢迎留言指教。
参考:https://docs.unity3d.com/ScriptReference/Renderer-sortingOrder.html
https://docs.unity3d.com/ScriptReference/Canvas.html
https://docs.unity3d.com/ScriptReference/ParticleSystem.html
https://answers.unity.com/questions/306777/how-to-access-particlesystemrenderer.html
----码字不易,欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/beeasy/
UGUI中显示粒子特效的更多相关文章
- Unity中的粒子特效的 RendererQ 排序
这里接https://www.cnblogs.com/luguoshuai/p/10021660.html 这里介绍两套粒子排序的方法. 首先声明,这两套排序方法均不是本人所写,是在项目开发的过程当中 ...
- Unity NGUI和UGUI与模型、特效的层级关系
目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...
- UGUI中粒子特效与UI的遮挡问题
问题背景: 在做主线任务时发现完成任务后的特效显示穿透上面的UI层,不美观,策划不乐意了,抓紧解决下 解决思路: 首先讲下影响渲染顺序的因素: 能够影响渲染顺序的因素有:1.Camera Depth ...
- UGUI 粒子特效与UI层级问题
游戏中,界面上有些按钮之上需要放置一个特效,或者有些区域显示比如image上显示一个特效,这时候如果再打开一个UI,我们需要让新的UI显示在特效上层,而不是被特效遮挡,这是就需要设置特效的渲染顺序. ...
- Mask裁切UI粒子特效或者3D模型
刚好前几天有人问我这个问题,再加上新项目也可能用,所以这两天就研究了一下.其实如果粒子特效 和3D模型 都用RenderTexture来做的话就不会有裁切的问题,但是粒子特效用RenderTextur ...
- 【Stage3D学习笔记续】真正的3D世界(五):粒子特效
先看效果,按下空格键添加粒子特效: 一般而言粒子特效的实现都是比较复杂的,且不说实现粒子特效的编码和设计,光是编写一个粒子编辑器就不是简单的一件事,但是作者使用了很取巧的方式来完成,我们接下来深入代码 ...
- js实现粒子特效,particles.js的使用
今天偶然看到了一个比较炫酷的js网页.是粒子特效的,就试着用了用.一下是步骤,方便以后查看使用. 1.在网站下载源码https://github.com/VincentGarreau/particle ...
- Three.js粒子特效,shader渲染初探(一篇非常详细的介绍)
Three.js粒子特效,shader渲染初探 转载来源:https://juejin.im/post/5b0ace63f265da0db479270a 这大概是个序 关于Three.js,网上有不多 ...
- Unity:控制粒子特效的移动方向
前几天在项目中遇到一个问题,需求是界面中先展示一段闪光特效,停顿一段时间后特效飞往一个固定的位置然后消失,类似于跑酷游戏吃到金币后金币飞往固定的金币数值显示框那种效果(具体是通过特效来实现还是直接通过 ...
随机推荐
- Caused by: org.xml.sax.SAXParseException; lineNumber: 28; columnNumber: 81;
1.错误描述 严重: Exception sending context initialized event to listener instance of class org.springframe ...
- Python实现常用的数据结构
Python中的数据结构 #巧用Python列表特性实现特定数据结构 #栈实现stack = []stack.push(x)stack.pop()stack[-1] #队列实现from colle ...
- Django学习-10-命名空间
不使用命名空间,且两个APP某条url使用相同的name属性 app01_urls.py urlpatterns = [ url(r'aaa/$', views.app01_aaa, name=& ...
- Linux之23个重要命令
作为工作几年的Linux运维老司机,总结了Linux命令行的常用的一些用法,希望对您有所收获. 1. 搜索 在vi和vim中如果打开一个很大的文件,不容易找到对应的内容,可以使用自带的搜索关键字进行搜 ...
- 自己用的reset.css,大部分转载,加上自己常用的设置
@charset "UTF-8";/*KISSY CSS Reset理念:清除和重置是紧密不可分的特色:1.适应中文 2.基于最新主流浏览器维护:玉伯(lifesinger@gma ...
- 开发中使用Gson的实例(时间格式错误解决方法)
...... // 通过GSON解析,使用4个实体类来接受(TotalResponse.TradeRateResponse.TradeRatess.TbTradeRates) GsonBuilder ...
- nginx学习之rewrite
rewrite 语法学习 什么是rewrite nginx的rewrite主要功是实现URL地址重写.nginx的rewrite规则需要PCRE的支持,既可以通过Perl兼容正则表达式进行规则匹配.n ...
- 关于AJAX异步请求的那些事儿(2)
1.使用AJAX发起GET请求消息 xhr.open("GET","XX.PHP?K1=V1$K2=V2",true); xhr.send(null); 2.使 ...
- 防F12审查元素扒代码:按下F12关闭当前页面
有的时候我看别人的网站的某个部分做的比较好我都会通过按F12审查元素来查看别人的代码,那么如果不然别人查看自己网站的代码呢.一段JavaScript代码即可实现上述功能,插入到footer.php或者 ...
- Unity3D判断角色对敌人是否可见
在编写敌人AI的状态机时 经常需要判断角色对敌人来说是不是可见的 如果是可见的,则做出追击或者攻击动作 如果是不可见的,则保持idle或者巡逻状态 判断是否可见 包括两个步骤 1.地方角色的视见向量和 ...