当前位置: 首页 > news >正文

【unity插件】UGUI的粒子效果(UI粒子)—— Particle Effect For UGUI (UI Particle)

文章目录

  • 前言
  • 插件地址
  • 描述
  • 特征
  • Demo 演示
  • 如何玩演示
    • 对于 Unity 2019.1 或更高版本
    • 对于 Unity 2018.4 或更早版本
  • 用法
  • 基本上是用法
  • 使用您现有的 ParticleSystem 预制件
  • 带 Mask 或 RectMask2D 组件
  • 脚本用法
  • UIParticleAttractor 组件
  • 开发说明
    • 常见问题解答:为什么我的粒子效果无法正确显示?
  • 着色器限制
    • 建议使用 UI 着色器。
    • 不支持内置着色器
    • (2019.4 或更早版本)UV.zw 组件将被丢弃
    • (2019.4 或更早版本)自定义顶点流
  • 开销
  • 如何制作自定义着色器以支持 Mask/RectMask2D 组件
  • 完结

前言

该插件使用新的 APIMeshBake/MashTrailBake(随 Unity 2018.2 添加)通过 CanvasRenderer 渲染粒子。您可以在没有 Camera、RenderTexture、Canvas 的情况下为 UGUI 屏蔽和排序粒子。

插件地址

https://github.com/mob-sakai/ParticleEffectForUGUI

描述

在这里插入图片描述

此插件使用新的 API MeshBake/MashTrailBake (随 Unity 2018.2 添加)通过 CanvasRenderer 渲染粒子。您可以在没有 Camera、RenderTexture、Canvas 的情况下为 uGUI 遮罩和排序粒子。

将这种“烤网”方法与传统方法进行比较:

方法截屏
Baking mesh(UIParticle)按原样呈现。可屏蔽。排序。更少的对象。不支持自定义顶点流 TEXCOORD*.zw 的组件在这里插入图片描述
Do nothing按原样呈现。看起来像一个小故障。不可屏蔽。不可排序。在这里插入图片描述
Convert particle to UIVertex(UIParticleSystem)可屏蔽。可排序。更少的对象。调整是困难的。需要 UI 着色器。难以调整比例。强制分层缩放。模拟结果不正确。不支持跟踪、变换旋转、时间缩放。每帧生成大量 GC。在这里插入图片描述
Use Canvas to sort按原样呈现。可排序。您必须管理分拣订单。不可屏蔽。更多批次。在这里插入图片描述
Use RenderTexture可屏蔽。可排序。需要 Camera 和 RenderTexture。难以调整位置和大小。质量取决于 RenderTexture 的设置。在这里插入图片描述
方法编辑器上的 FPSiPhone6上的FPSXperia XZ上的FPS
Particle System435722
UIParticleSystem430(不可测量)
Sorting By Canvas434418
UIParticle17124
UIParticle with MeshSharing444530

特征

  • 易于使用:包装开箱即用

  • 按同级索引对粒子效果和 UI 进行排序

  • 不需要 Camera、RenderTexture 或 Canvas

  • 通过 Mask 或 RectMask2D 遮罩

  • 支持 Trail 模块

  • 支持 CanvasGroup alpha

  • 没有分配

  • 支持叠加、相机空间和世界空间

  • 支持通用渲染管线 (URP) 和高清渲染管线 (HDRP)

  • 支持禁用 Enter Play Mode Options > Reload Domain

  • 支持使用 AnimationClip (AnimatableProperty) 更改材质属性
    在这里插入图片描述

  • [4.0.0+]支持8+材质

  • [4.0.0+]更改独立平台(Windows、MacOSX 和 Linux)的窗口大小时,正确世界空间粒子位置

  • [4.0.0+]UI 的自适应缩放

  • [4.0.0+]网格共享组以提高性能
    在这里插入图片描述

  • [4.0.0+]粒子吸引子组件
    在这里插入图片描述

  • [4.1.0+]相对/绝对粒子位置模式
    在这里插入图片描述

Demo 演示

WebGL Demo WebGL 演示
在这里插入图片描述

WebGL 演示(卡通特效和战争特效)
在这里插入图片描述

如何玩演示

对于 Unity 2019.1 或更高版本

1.打开 Package Manager 窗口
2.在包列表中选择 UI Particle 包
3.点击 Import Sample 按钮
在这里插入图片描述
4.演示项目被导入到 Assets/Samples/UI Particle/{version}/Demo
5.打开 UIParticle_Demo 场景并播放

对于 Unity 2018.4 或更早版本

1.从菜单中选择 Assets/Samples/UI Particle Demo
2.演示项目被导入到 Assets/Samples/UI Particle/{version}/Demo
3.打开 UIParticle_Demo 场景并播放

用法

UIParticle 组件
UIParticle 控制附加到其自己的游戏对象和子游戏对象的 ParticleSystems。
在这里插入图片描述

性能描述
Maskable此图形是否允许遮罩。
Scale缩放渲染。启用切换后 3D ,支持 3D 比例 (x,y,z)。
Animatable Properties如果要在 AnimationClip 中更新材质属性(例如 _MainTex_ST 、 _Color ),请使用它来标记更改。
Mesh Sharing粒子模拟结果在同一组内共享。在很小的负载下可以显示大量相同的效果。启用 Random 切换后,它将随机分组。
Position ModeAbsolute(绝对):从 ParticleSystem . 的世界位置发出。Relative(相对):从 ParticleSystem .
Auto ScalingTransform.lossyScale(=世界比例)将在更新 (1, 1, 1) 时设置为。它可以防止 root-Canvas 缩放影响层次结构缩放 ParticleSystem 。
Rendering Order要呈现的 ParticleSystem 列表。您可以更改顺序和材料。

注意: 按下 Refresh 按钮可根据子 ParticleSystem 的排序顺序和 z 位置重建渲染顺序。

基本上是用法

1.选择此选项 Game Object/UI/ParticleSystem 可创建具有 ParticleSystem 的 UIParticle。
在这里插入图片描述
2.根据需要调整 ParticleSystem。
在这里插入图片描述

使用您现有的 ParticleSystem 预制件

1.选择以 Game Object/UI/ParticleSystem (Empty) 创建 UIParticle。
在这里插入图片描述
2.将 ParticleSystem 预制件拖放到 UIParticle 上。
在这里插入图片描述

带 Mask 或 RectMask2D 组件

如果要遮罩粒子,请将支持模板的着色器(例如 UI/UIAdditive )设置为 ParticleSystem 的材质。如果使用某些自定义着色器,请参阅如何创建自定义着色器以支持 Mask/RectMask2D 组件部分。
在这里插入图片描述

脚本用法

// Instant ParticleSystem prefab with UIParticle on runtime.
var go = GameObject.Instantiate(prefab);
var uiParticle = go.AddComponent<UIParticle>();// Control by ParticleSystem.
particleSystem.Play();
particleSystem.Emit(10);// Control by UIParticle.
uiParticle.Play();
uiParticle.Stop();

UIParticleAttractor 组件

UIParticleAttractor 吸引由指定的 ParticleSystem 生成的粒子。
在这里插入图片描述
在这里插入图片描述

性能描述
Particle System吸引由指定粒子系统生成的粒子。
Distination Radius一旦粒子在半径内,粒子生存期将变为 0 并被 OnAttracted 调用。
Delay Rate延迟开始吸引。它是粒子起始寿命的百分比。
Max Speed最大吸引速度。如果此值太小,则吸引可能无法在生存期结束时完成,并且 OnAttracted 可能不会被调用。
Movement吸引运动类型。(线性、平滑、球面)
Update Mode正常(Normal):使用缩放的增量时间进行更新。未缩放时间(Unscaled Time):使用未缩放的增量时间进行更新。
OnAttracted吸引完成时调用的事件(每个粒子)。

开发说明

常见问题解答:为什么我的粒子效果无法正确显示?

如果 ParticleSystem 单独显示粒子但 UIParticle 不能正确显示,请检查以下几点:

  • 着色器限制
    • 大多数情况可以通过使用 UI/Additive 或 UI/Default 来解决。
  • 颗粒被遮蔽
    • UIParticle 是可屏蔽的。
    • 正确设置 Mask 或 RectMask2D 组件。
  • 颗粒太小
    • 如果粒子足够小,它们就不会出现在屏幕上。
    • 增加 Scale 值。
    • 如果您不想根据分辨率更改表观大小,请尝试 Auto Scaling 选项。
  • 颗粒太多
    • 最多可显示 65535 个顶点(对于网格组合限制)。
    • 请正确设置 Emission 模块和 Max Particles ParticleSystem。
  • 粒子在屏幕外发射。
    • 当 Position Mode = Relative 时,粒子是从 ParticleSystem 的缩放位置发射的,而不是从 ParticleSystem 的屏幕点发射的。
    • 将 ParticleSystem 放置在适当的位置或尝试 Position Mode = Absolute .
  • UIParticle 附加到与 ParticleSystem
    • Transform.localScale 将被 Auto Scaling 选项覆盖。
    • 建议放在 ParticleSystem UIParticle .

着色器限制

建议使用 UI 着色器。

  • 如果需要简单的加性着色器,请改用着 UI/Additive 色器。
  • 如果您需要一个简单的 alpha 混合着色器,请改用着 UI/Default 色器。
  • 如果自定义着色器无法与 UIParticle 配合使用,请考虑创建自定义 UI 着色器。

不支持内置着色器

UIParticle 不支持除 UI/Default .
如果检测到它们的使用,检查器中会显示错误。
请改用 UI 着色器。

(2019.4 或更早版本)UV.zw 组件将被丢弃

UIParticleRenderer 基于 UIVertex 渲染粒子。
因此,着色器中的每个 UV 只有 xy 分量可用。(ZW 组件将被丢弃)。
因此,不幸的是,UIP文章不能很好地与某些着色器一起使用。

(2019.4 或更早版本)自定义顶点流

使用自定义顶点流时,可以用“不必要的”数据填充 zw 组件。

开销

UIParticle 有一些开销,批处理取决于 uGUI。
提高性能时,请记住以下几点:

  • 如果要显示大量相同的效果,请考虑 Mesh Sharing UIParticle 组件中的功能。
    • 如果您不喜欢统一的输出,请考虑 Random Group 功能。
      在这里插入图片描述
  • 如果您使用多种材质,您将有更多的绘制调用。
    • 考虑单个材质、图集精灵,并在 ParticleSystem Texture Sheet Animation 的模块中使用 Sprite 模式。

如何制作自定义着色器以支持 Mask/RectMask2D 组件

着色器提示

Shader "Your/Custom/Shader"
{Properties{// ...// #### required for Mask ####_StencilComp ("Stencil Comparison", Float) = 8_Stencil ("Stencil ID", Float) = 0_StencilOp ("Stencil Operation", Float) = 0_StencilWriteMask ("Stencil Write Mask", Float) = 255_StencilReadMask ("Stencil Read Mask", Float) = 255_ColorMask ("Color Mask", Float) = 15[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0}SubShader{Tags{// ...}// #### required for Mask ####Stencil{Ref [_Stencil]Comp [_StencilComp]Pass [_StencilOp]ReadMask [_StencilReadMask]WriteMask [_StencilWriteMask]}ColorMask [_ColorMask]// ...Pass{// ...// #### required for RectMask2D #####include "UnityUI.cginc"#pragma multi_compile __ UNITY_UI_CLIP_RECTfloat4 _ClipRect;// #### required for Mask #####pragma multi_compile __ UNITY_UI_ALPHACLIPstruct appdata_t{// ...};struct v2f{// ...// #### required for RectMask2D ####float4 worldPosition    : TEXCOORD1;};v2f vert(appdata_t v){v2f OUT;// ...// #### required for RectMask2D ####OUT.worldPosition = v.vertex;return OUT;}fixed4 frag(v2f IN) : SV_Target{// ...// #### required for RectMask2D #####ifdef UNITY_UI_CLIP_RECTcolor.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);#endif// #### required for Mask #####ifdef UNITY_UI_ALPHACLIPclip (color.a - 0.001);#endifreturn color;}ENDCG}}
}

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

相关文章:

【unity插件】UGUI的粒子效果(UI粒子)—— Particle Effect For UGUI (UI Particle)

文章目录 前言插件地址描述特征Demo 演示如何玩演示对于 Unity 2019.1 或更高版本对于 Unity 2018.4 或更早版本 用法基本上是用法使用您现有的 ParticleSystem 预制件带 Mask 或 RectMask2D 组件脚本用法UIParticleAttractor 组件开发说明常见问题解答&#xff1a;为什么我的粒…...

高教社杯数模竞赛特辑论文篇-2023年C题:基于历史数据的蔬菜类商品定价与补货决策模型(附获奖论文及R语言和Python代码实现)(中)

目录 六、 问题三模型建立与求解 6.1 问题三求解思路 6.2 问题三模型建立 6.2.1 模型假定和预处理...

element-ui plus 文件上传组件,设置单选,并支持替换和回显

遇到的坑&#xff1a; 1、设置limit属性为1后&#xff0c;on-change属性不生效 2、on-exceed属性虽然值改变&#xff0c;但是回显没有随之变化 3、由于element-ui plus版本file-list值出现问题 最后的解决方案决定不设置 limit 属性&#xff0c;通过 on-change 中的判断来控制数…...

ZYNQ7000---FLASH读写

提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Flash是什么&#xff1f;二、Flash的分类1、内部结构&#xff08;接口&#xff09;区分&#xff1a;2、外部接口区分&#xff1a;SPIQPSI Flash: QSPI 控制…...

SpringMVC log4j1升级log4j2

整个升级过程耗时5个小时&#xff0c;中间耗时最长的是找合适的包和升级后日志无法打印以及无法控制日志输出位置&#xff0c;完成后感觉其实很简单&#xff0c;如果一开始就能看到我现在写的笔记&#xff0c;可能几分钟就搞定了。 第一步&#xff1a;首先上log4j2所需要的包 …...

MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(十一)

目录 几个相关概念 1、焦点(focus) 2、弥散圆(circle of confusion) 3、景深(depth of field) 知识储备 线阵相机...

UE的PlayerController方法Convert Mouse Location To World Space

先上图&#xff1a; Convert Mouse Location To World这是PlayerController对象中很重要的方法。 需要说明的是两个输出值。 第一个是World Location&#xff0c;这是个基于世界空间的位置值&#xff0c;一开始我以为这个值和当前摄像机的位置是重叠的&#xff0c;但是打印出来…...

【Qt之QStandardItemModel】使用,tableview、listview、treeview设置模型

1. 引入 QStandardItemModel类提供了一个通用的模型&#xff0c;用于存储自定义数据。 以下是其用法&#xff1a;该类属于gui模块&#xff0c;因此在.pro中&#xff0c;需添加QT gui&#xff0c;如果已存在&#xff0c;则无需重复添加。 首先&#xff0c;引入头文件&#xff…...

mongodb 6/7的 windows安装问题

https://cloud.tencent.com/developer/article/2205068...

网站建设所需要的主要资源相关介绍

人力资源&#xff1a; 网站开发人员&#xff1a;前端开发、后端开发、UI/UX设计师等。 内容创作者&#xff1a;负责编写网站内容&#xff0c;包括文章、图片和视频。 项目经理&#xff1a;协调团队工作&#xff0c;确保项目按计划进行。 数字营销&#xff1a;帮助推广和市场…...

互联网上门预约洗衣洗鞋店小程序;

拽牛科技干洗店洗鞋店软件&#xff0c;方便快捷&#xff0c;让你轻松洗衣。只需在线预约洗衣洗鞋服务&#xff0c;附近的门店立即上门取送&#xff0c;省心省力。轻松了解品牌线下门店&#xff0c;通过列表形式展示周围门店信息&#xff0c;自动选择最近门店为你服务。简单填写…...

OSPF开放最短路径优先(Open Shortest Path First)协议

OSPF开放最短路径优先(Open Shortest Path First)协议 为克服RIP的缺点(限制网络规模&#xff0c;坏消息传得慢)在1989年开发出来的原理很简单&#xff0c;但实现很复杂使用了Dijkstra提出的最短路径算法SPF(Shortest Path First)采用分布式的链路状态协议(link state protoco…...

数据结构(c语言版本) 字符串操作

作业要求 创建字符串插入、字符串、字符定位、求字串、删除某个字符、替换某个字符串、合并两个字符串 代码实现 #include <stdio.h> #include <string.h> #define MAXSIZE 100//定义结构体 struct SeqString{char data[MAXSIZE];int charlen; };//初始化 void …...

【Pyqt5】windows和linux安装Pyqt5+designer

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、windows安装二、linux安裝linux 安装pyqt5 designer 一、windows安装 PyCharm安装PyQt5及其工具&#xff08;Qt Designer、PyUIC、PyRcc…...

【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

目录 Ⅰ. 理论部分 0x00 升降计数器&#xff08;UP DOWN Counter&#xff09; 0x01 波纹计数器&#xff08;Ripple Counter&#xff09; 0x02 约翰逊计数器&#xff08;Johnson Counter&#xff09; Ⅱ. 实践部分 0x00 实现&#xff1a;升降计数器&#xff08;4-bit&…...

使用uniapp写小程序,真机调试的时候不显示log

项目场景&#xff1a; 当小程序文件太大的情况下使用真机调试&#xff0c;但是真机调试的调试器没有任何反应 问题描述 使用uniapp写小程序&#xff0c;真机调试的时候不显示log 原因分析&#xff1a; 提示&#xff1a;因为真机调试的时候没有压缩文件&#xff0c;所以调试的…...

hive数据库delete删除部分数据/删除分区内的数据

Hive delete 删除部分数据 一、hive删除数据1.1、删除整个表1.2、删除表中的特定行1.3、删除表中的特定分区1.4、删除分区内的部分数据1.5、清空表中的所有数据 二、扩展2.1、dynamic partition on Crud si not disabled, please set hive.crud.dynamic.partitiontrue to enabl…...

C/C++条件编译:#ifdef、#else、#endif等

文章目录 #undef指令从C预处理器角度看已定义条件编译1.#ifdef、#else和#endif指令 #ifndef指令#ifndef指令通常用于防止多次包含一个文件程序使用#ifndef避免文件被重复包含 #if和#elif指令条件编译还有一个用途是让程序更容易移植 参考 程序员可能要为不同的工作环境准备C程序…...

基于51单片机步进电机节拍步数正反转LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)

基于51单片机步进电机节拍步数正反转LCD1602显示 &#x1f4d1;1. 主要功能&#xff1a;&#x1f4d1;2. 讲解视频&#xff1a;&#x1f4d1;3. 仿真&#x1f4d1;4. 程序代码&#x1f4d1;5. 设计报告&#x1f4d1;6. 设计资料内容清单&&下载链接&#x1f4d1;[资料下…...

Vim 从何而来?

Vim 编辑器的创造者、维护者和终身领导者 Bram Moolenaar 为了纪念这位杰出的荷兰程序员&#xff0c;我们今天来聊一聊 Vim 的历史。 Vim 无处不在。它被很多人使用。同时 Vim 可能是世界上 “最难用的软件之一” &#xff0c;但是又多次被程序员们评价为 最受欢迎的 代码编辑…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...