今天在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. Linux显示工作路径

    Linux显示工作路径 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ pwd /home/youhaidong

  2. SQLite笔记

    一.SQLite下载: http://www.sqlite.org/download.html (或在NuGet下载安装) 二.SQLite操作: 1.添加引用System.Data.SQLite,如 ...

  3. CentOS 7离线安装MySQL 5.7

    系列文章首发平台为果冻想个人博客.果冻想,是一个原创技术文章分享网站.在这里果冻会分享他的技术心得,技术得失,技术人生.我在果冻想等待你,也希望你能和我分享你的技术得与失,期待. 前言 网上已经有那么 ...

  4. MySQL定时备份数据库

    一.MySQL数据备份 1.1. mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump ...

  5. python 生成器和迭代器有这篇就够了

    本节主要记录一下列表生成式,生成器和迭代器的知识点 列表生成器 首先举个例子 现在有个需求,看列表 [0,1,2,3,4,5,6,7,8,9],要求你把列表里面的每个值加1,你怎么实现呢? 方法一(简 ...

  6. WebView的使用--Hybrid App

    App页面是运行在WebView中的,一个App页面对应一个WebView,本例实现两个WebView之间的跳转. 实现过程(用到了MUI框架): 1.页面标识+跳转按钮(index.html.mai ...

  7. CSS3 column属性

    css3 column属性的应用 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta c ...

  8. DirectSound---3D环境

    DirectSound对于单声道的Wav文件(或者说对于单声道的PCM音频数据)提供了内置3D音效的模拟,你能够控制每一个声源和收听者的立体位置,对移动的物体应用多普勒效果等等.在单个应用程序中,可以 ...

  9. [BZOJ4804]欧拉心算

    题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}\phi(\gcd(i,j))\] 多组数据,\(n\le10^7\). sol SBT 单组数据\(O(\sqrt n ...

  10. Spring【DAO模块】就是这么简单

    前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的DAO模块对JDBC的支持,以及Spring对事务的控制... 对于JDBC而言,我们肯定不会陌 ...