今天在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中显示粒子特效的更多相关文章

  1. Unity中的粒子特效的 RendererQ 排序

    这里接https://www.cnblogs.com/luguoshuai/p/10021660.html 这里介绍两套粒子排序的方法. 首先声明,这两套排序方法均不是本人所写,是在项目开发的过程当中 ...

  2. Unity NGUI和UGUI与模型、特效的层级关系

    目录 1.介绍两大UI插件NGUI和UGUI 2.unity渲染顺序控制方式 3.NGUI的控制 4.UGUI的控制 5.模型深度的控制 6.粒子特效深度控制 7.NGUI与模型和粒子特效穿插层级管理 ...

  3. UGUI中粒子特效与UI的遮挡问题

    问题背景: 在做主线任务时发现完成任务后的特效显示穿透上面的UI层,不美观,策划不乐意了,抓紧解决下 解决思路: 首先讲下影响渲染顺序的因素: 能够影响渲染顺序的因素有:1.Camera Depth  ...

  4. UGUI 粒子特效与UI层级问题

    游戏中,界面上有些按钮之上需要放置一个特效,或者有些区域显示比如image上显示一个特效,这时候如果再打开一个UI,我们需要让新的UI显示在特效上层,而不是被特效遮挡,这是就需要设置特效的渲染顺序. ...

  5. Mask裁切UI粒子特效或者3D模型

    刚好前几天有人问我这个问题,再加上新项目也可能用,所以这两天就研究了一下.其实如果粒子特效 和3D模型 都用RenderTexture来做的话就不会有裁切的问题,但是粒子特效用RenderTextur ...

  6. 【Stage3D学习笔记续】真正的3D世界(五):粒子特效

    先看效果,按下空格键添加粒子特效: 一般而言粒子特效的实现都是比较复杂的,且不说实现粒子特效的编码和设计,光是编写一个粒子编辑器就不是简单的一件事,但是作者使用了很取巧的方式来完成,我们接下来深入代码 ...

  7. js实现粒子特效,particles.js的使用

    今天偶然看到了一个比较炫酷的js网页.是粒子特效的,就试着用了用.一下是步骤,方便以后查看使用. 1.在网站下载源码https://github.com/VincentGarreau/particle ...

  8. Three.js粒子特效,shader渲染初探(一篇非常详细的介绍)

    Three.js粒子特效,shader渲染初探 转载来源:https://juejin.im/post/5b0ace63f265da0db479270a 这大概是个序 关于Three.js,网上有不多 ...

  9. Unity:控制粒子特效的移动方向

    前几天在项目中遇到一个问题,需求是界面中先展示一段闪光特效,停顿一段时间后特效飞往一个固定的位置然后消失,类似于跑酷游戏吃到金币后金币飞往固定的金币数值显示框那种效果(具体是通过特效来实现还是直接通过 ...

随机推荐

  1. cfDNA基本知识

    定义 Circulating free DNA or Cell free DNA (cfDNA):循环游离DNA或者细胞游离DNA,释放到血浆中的降解的DNA片段. https://en.wikipe ...

  2. 关于ios手机游览器针对overflow:hidden设置无效的解决办法

    Ordinarily, overflow: hidden; on the body tag is sufficient to prevent scrolling a web page, if for ...

  3. 常用的freemark语法(三)

    一,符号的意义 1.0,单问号 ?后面要加关键字,例如:<#if object?exists>object对象不为空</#if> <#if str??>${str? ...

  4. Java并发系列[8]----CyclicBarrier源码分析

    现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始.例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始.在JUC包中为我们 ...

  5. numpy使用总结

    numpy是Python中常用的数据处理库的基础库,一般通过import numpy as np的方式导进 科学计算库numpy 在numpy中,主要的数据结构是ndarray,在numpy中称为数组 ...

  6. POJ 1791 Heavy Transportation(最大生成树)

    题面 Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand ...

  7. 【POJ 3401】Asteroids

    题面 Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x ...

  8. BZOJ4321: queue2

    题面 传送门 Sol 先设一个套路的状态:\(f[i][j]\)表示到第\(i\)个人,有\(j\)对冲突 但是我们不能确定\(i-1\),所以不好决策i的位置 所以再加一维\(0/1\),\(f[0 ...

  9. [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  10. MySQL配置文件

    [mysqld]datadir=/usr/local//mysql/data    #数据存放位置socket=/var/lib/mysql/mysql.sockuser=mysqllower_cas ...