【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。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/191856.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言:解决谁是凶手的问题。

题目&#xff1a; 思路&#xff0b;代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS //假设全部人说的话都为真&#xff0c;那结果就为4&#xff0c;现在已知三真一假&#xff0c;且说假话的人为凶手 // 现在将全部情况相加&#xff0c;满足三真一假的情况即为凶手。 #incl…

【JVM】Java内存溢出分析(堆溢出、栈溢出、方法区溢出、直接内存溢出)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

十年软件测试老程序告诉你性能测试的左移右移到底能干嘛

常规的性能测试一般都是在测试阶段集成测试时候才开始介入&#xff0c;很容易测试时间不够&#xff0c;可不可以借鉴测试左移右移的思路&#xff0c;更早的介入和发现性能风险&#xff0c;然后在测试阶段更专注于分析优化&#xff1f; 借着这个问题&#xff0c;结合自己的实践…

C语言从文件 D://test.txt 读取字符串,将字符串中所有的大写字符改为小写字母并写回到源文件中

完整代码&#xff1a; /*从文件 D://test.txt 读取字符串&#xff0c;将字符串中所有的大写字母改为小写字母并写回 到源文件中*/ #include<stdio.h>//将字符串中所有的大写字母改为小写字母 void func(char *buff){while (*buff!\0){if (*buff>A&&*buff<…

信息检索与数据挖掘 | 【实验】检索评价指标MAP、MRR、NDCG

文章目录 &#x1f4da;实验内容&#x1f4da;知识梳理&#x1f4da;实验步骤&#x1f407;前情提要&#x1f407;MAP评价指标函数&#x1f407;MRR 评价指标函数&#x1f407;NDCG评价指标函数&#x1f407;调试结果 &#x1f4da;实验内容 实现以下指标评价&#xff0c;并对…

打印字符(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

NSSCTF第12页(1)

[FSCTF 2023]细狗2.0 应该是和[HUBUCTF 2022 新生赛]ezsql搞混掉了 点击按钮出现了 发现输入什么回显什么 伪协议也不行 看源代码发现了这个玩意 输入了1;发现了其他回显 ls 发现了两个文件 发现被限制了 不知道是cat还是空格 绕过 直接找吧还是 得到flag [SCTF 2021]loginm…

电商平台api接口对接电商数据平台,获取商品详情页面实时信息须知

随着互联网的发展和普及&#xff0c;电商平台已成为人们日常生活中不可或缺的一部分。而为了保证电商平台的正常运行&#xff0c;平台与开发者之间需要进行数据交互&#xff0c;这便涉及到了电商平台API接口对接的问题。本文将详细介绍电商平台API接口对接的须知事项。 一、了解…

《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享

前言 ChatGPT是一款通用人工智能&#xff08;AI&#xff09;工具&#xff0c;使用过它的人都能感受到它的魅力。AI并不是一个新事物&#xff0c;它在全世界都发展很多年了&#xff0c;但在ChatGPT诞生之前&#xff0c;我们的AI只能算垂直AI&#xff0c;比如AlphaGo&#xff0c…

jenkins分步式构建环境(agent)

rootjenkins:~# netstat -antp|grep 50000 tcp6 0 0 :::50000 ::&#x1f617; LISTEN 5139/java 1.52 安装Jenkins rootubuntu20:~# dpkg -i jenkins_2.414.3_all.deb 配置各种类型的Agent的关键之处在于启动Agent的方式 ◼ JNLP Agent对应着“通过Java Web启动代理”这种方…

【电路笔记】-诺顿定理(Norton‘s Theorem)

诺顿定理&#xff08;Norton’s Theorem&#xff09; 文章目录 诺顿定理&#xff08;Nortons Theorem&#xff09;1、概述与定义2、诺顿模型确定3、一些线性电路的诺顿模型3.1 单电压源3.2 单电流源3.3 多电流/电压源 5、总结 本文是我们上一篇有关戴维南定理的文章的延续。 在…

计算机缺失vcruntime140.dll如何修复?超简单的5个解决方法

在我们日常使用电脑的过程中&#xff0c;可能会遇到各种各样的问题和错误提示。其中&#xff0c;一个比较常见的错误提示就是“vcruntime140.dll丢失”。这个错误通常发生在我们尝试运行某个程序或应用时&#xff0c;系统无法找到或加载所需的vcruntime140.dll文件。 vcruntime…

2021年06月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 小猫位置在舞台中心,点击一次小猫后能前进10步的程序为? A: B: C: D: 答案:B 第2题 快速切换到下一个背景图片应该使用哪个积木? A: B:

Java入门篇 之 继承

本篇碎碎念&#xff1a;最近的课程遇到瓶颈了&#xff0c;看的时候感觉自己会了&#xff0c;但是结束仔细一回顾还是一知半解&#xff0c;一点一点来吧&#xff0c;基础必须要打好(自己给自己好的心里暗示&#xff0c;结局一定是好的) 今日份励志文案:慢慢改变&#xff0c;慢慢…

酷柚易汛ERP-购货订单操作指南

1、应用场景 先下购货订单&#xff0c;收货入库后生成购货单。 2、主要操作 2.1 新增购货订单 打开【购货】-【购货订单】新增购货订单。&#xff08;*为必填项&#xff0c;其他为选填&#xff09; ① 录入供应商&#xff1a;点击供应商字段框的 &#xff0c;在弹框中选择供…

hive和spark-sql中 日期和时间相关函数 测试对比

测试版本&#xff1a; hive 2.3.4 spark 3.1.1 hadoop 2.7.7 1、增加月份 add_months(timestamp date, int months)add_months(timestamp date, bigint months)Return type: timestampusage:add_months(now(),1) 2、增加日期 adddate(timestamp startdate, int days)…

如何判断从本机上传到服务器的文件数据内容是一致的?用md5加密算法!

问题场景 最近在帮导师做横向&#xff0c;我想把整个项目环境放到服务器中&#xff0c;需要把一个很大的数据文件传到服务器&#xff0c;传上去很方便&#xff0c;但是涉及到文件的压缩上传和服务器内解压环节&#xff0c;不是太确定文件在本机和服务器的数据内容是否一致。 解…

由于找不到msvcp140.dll无法继续执行代码有哪些解决方法

msvcp140.dll是Microsoft Visual C 2015 Redistributable的一个组件&#xff0c;它是运行许多Windows应用程序所必需的。当msvcp140.dll丢失或损坏时&#xff0c;可能会导致以下问题&#xff1a; 1. 程序无法启动或崩溃。 2. 系统出现错误提示&#xff0c;如“找不到msvcp140…

开启学历新征程,电大搜题助您轻松获取知识

作为一名电大学者&#xff0c;有肩负着传递真实信息、宣传正面价值的使命&#xff0c;而今天我要向您介绍的是一款非常实用的学习工具——电大搜题微信公众号。通过该平台&#xff0c;您可以获得更多关于浙江开放大学和广播电视大学的学习资源&#xff0c;助您在学习和工作上取…

酷柚易汛ERP- 组装单与拆卸单操作

1、功能介绍 组装单用来处理企业组装等加工业务&#xff0c;拆卸单用来处理企业拆卸等加工业务&#xff0c;支持一对多的产品加工业务。 2、主要操作 2.1 新增组装单 打开【仓库】-【组装单】新增组装单。 录入组合件与子件&#xff0c;单据审核后&#xff0c;系统根据存货…