Unity VFX -- (4)创建burst粒子效果

news2024/11/24 17:30:17

        如果用户成功达成某个目标,我们可以使用一个爆裂的礼花来激励用户。如果角色挥舞刀剑,我们可以做出剑气来增加气势。如果角色落到地面上,我们可以在脚部做出飞舞的灰尘来增加表现力。这些都可以视为burst粒子效果。

        下面是一些burst粒子效果(burst particle)的例子,由于本人未能找到合适的翻译,后面直接用burst particle英文原文写。

武器射击时枪口的火花效果

玩家到达终点时庆祝的闪烁的礼花效果

 用户挥舞武器时的光影

        这些基于事件的(event-based)粒子bursts,和前面所做的环境特效是不同的,它们是由具体事件所触发的单次粒子的burst效果。

增加一个新的粒子burst

        一个burst particle和enviromental particle是类似的,只是burst particle并不会持续很长时间,并且通常产生于一个较小的区域。我们先向场景中添加一个新的粒子系统。

        1. Heirarchy中,点击右键,选择Effects -> Particle System,创建一个新的粒子系统,重命名为"FX_SmokeBurst",然后我们将它的位置设置到X=0,Y=0.5,Z=0并将旋转设置为X=-90,Y=0,Z=0(仅为案例中的位置,实际是放到火堆上,请根据实际情况移动和旋转)。

        2.  FX_SmodeBurst的Particle System组件中,展开主模块,去掉Looping属性勾选。

         去掉勾选后,粒子会立即停止播放。在场景视图中的Particle Effect窗口中点击Play后,我们会注意到产生了一个5秒钟的粒子效果,随后停止。这是因为Duration属性被设置为了5.目前看起来已经有点burst particle的效果了。

        为了创建出突发的粒子效果,我们将Duration降低为一个很小的值(比如0.05秒),并且将Rate over Time设置为一个很高的值(比如1000 particles每秒),这会在0.05秒内产生50个粒子(1000 * 0.05 = 50)。

        但目前看起来效果还是不理想,我们还需要对Bursts选项进行配置。

        3. 在Emission模块中,将Rate over Time设置为0,这样会避免粒子系统随着时间产生粒子。

        4. 在Emission模块中,点击Bursts部分的“+”,添加一个新的burst。

         这个默认的burst配置,表示在第0秒的时候(Time),burst会产生30个粒子(Count)1次(Cycles),概率是100%(Probability)。Interval值目前没有影响,因为我们只有一次burst cycle。

让粒子像烟一样运动

        前面用了burst后,粒子运动地有点快。接下来我们来让它们停留在火堆内。

        1. 在主模块中,将Start Speed属性降低到0.3秒。

        2. 在主模块中,将Start Lifetime降低到越1秒左右,这个值根据我们的需要调整。

         现在速度问题解决了,但烟看起来就像是从火堆底部外面产生的,我们需要修改一下发射器的形状。

        3. 在Shape模块中,将Shape属性从Cone改为Sphere,然后将Radius设置为大约0.5左右的值。

        目前粒子的移动看起来比较对了,但由于所有粒子都按照相同的速度移动,并且同时消失,这看起来不太自然。我们需要在系统中加入一点随机性来让效果看起来更加真实。

给粒子加一点随机性

         在粒子系统组件的Inspector中,我们可以看到许多属性后面带来一个小箭头,点击后会出现下拉菜单供我们选择。这些下拉菜单提供了用于设置值的额外的选项,包括随机化参数的能力。

        为了避免粒子同时产生和消失,我们可以让Start Lifetime变成随机值。

        1. 点击Start Lifetime属性的下拉菜单按钮,选择Random Between Two Constants

        我们会注意到现在这个属性有两个值了,一个是最小值,一个是最大值。

        2. 输入Start Lifetime的最小值和最大值。比如如果原来的Start Lifetime是1,我们可以将其设置为0.5和1.5,或者0.25和3.0。这个值修改后可以根据实际效果进行调整。完成后,粒子系统中的每个粒子的生命周期会有所不同。

        3. 我们还可以对Start Speed进行类似的操作,让粒子系统中每个粒子的速度也随机化。

使用渐变编辑器(Gradient editor)编辑Color over Lifetime

         为了修改让粒子在其生命周期中能够改变外观,我们需要启用一些新的模块。

        首先,这些粒子的产生和消失非常突兀,看起来很奇怪。我们可以加入一些淡入和淡出的效果。

        1. 选择并启用Color over Lifetime模块,然后展开它。

        2. 在Color over Lifetime模块里,选择白色的矩形盒子,打开Gradient Editor窗口。

        这个横向的条表示了在粒子的生命周期中粒子的颜色和透明度是什么,生命周期从横条的左侧开始 ,右侧结束。因此,默认情况下,粒子在整个生命周期中是白色并且不透明的。我们可以使用Gradient Editor来调整粒子在其生命周期中的颜色和透明度,如下图的蓝色淡入,橙色淡出。

         颜色条上方的标记决定了不同时间的透明度,下方的标记决定了颜色变化。目前我们只需要让我们的例子在开始时淡入,结束时淡出。

        3. 要让粒子有淡入效果,选择左上角的标记,将Alpha值设置为0。

        此时标记变成了黑色,表示颜色是完全透明的。

        这时我们预览一下例子实际的效果,会发现粒子在其生命周期中从完全透明到完全不透明。我们想要的效果是,在开始时例子快速淡入,结束时慢点淡出。我们调整一下箭头标记。

        4.  接下来使用渐变编辑器实现出自己的例子淡入淡出效果。要创建一个新的透明度标记,只需要在颜色条上方空白处选一下即可,要取消一个标记,将其向上或向下移动即可。

编辑Renderer和Texture Sheet Animation

         接下里我们将粒子的纹理做一下调整,现在我们不是简单地用另一个单个纹理来替换默认的粒子纹理,而是使用texture sheet。

纹理表(texture sheets)是什么

         一张纹理表里有一些子图,这些子图可以被循环遍历,实现动态动画的效果(每张子图类似于一个动画的关键帧)。如上图的烟雾效果,有四个子图,循环遍历它们会有烟雾形状变化的效果。

        我们可以使用纹理表来让每一个粒子的动画效果。

随机化纹理表里的纹理

        首先,我们需要将默认的粒子材质修改为包含了纹理表的材质。

        1. 展开Renderer模块,在Material属性出,选择SmodePuffMaterial的texture sheet。

        此时如果在场景视图中放大看烟雾,我们会发现现在每个粒子都显示了整个texture sheet的图案。

         为了解决这个问题,我们需要启用Texture Sheet Animation模块,这个模块允许我们切割纹理表为子图并能够实现动画效果。

        2. 启用并展开Texture Sheet Animation模块。我们会看到一个Tiles属性,这个属性定义了纹理表有多少行和列。

        3. 在Texture Sheet Animation模块中,将Tiles属性设置为X=2, Y=2,这是因为我们所使用的纹理表有两行两列。

        再次点击播放,看看效果。

         我们可以看到,默认情况下Start Frame是0,Cycles是1.这表示每个粒子会走完一遍纹理表的四帧子图(从第0帧开始)。虽然在某些场景下这样已经OK了,但对于烟雾来说看起来还是有点怪。因此,我们让起始帧变得随机化一点。

        4. 将Start Frame修改为Random Between Two Constants,然后设置最小和最大值为0和3.这样每个粒子会随机选择一帧作为起始帧。

        5. 将Cycles设置为0,设置为0后,这个值会自动被改为0.0001,这不会影响结果。

        预览看看效果如何

使用曲线改变Size over Time

        接下来我们让粒子在出现时变大,消失时变小。

        1. 启用并展开Size over Lifetime模块,在Size下拉菜单中选择Curve。

        2. 选择Size属性的曲线预览方框。当选中时,里面的线会变成红色。

        3. 如果我们看不到Particle System Curve窗口,在Inspector的底部将其往上拖动即可。 

        拖上来后,我们可以清楚地看到曲线图形了。

        这张图的横轴表示时间,纵轴表示大小

        默认的曲线是一条直线,表示随着时间增长,粒子会以线性方式逐渐增大。在time 0的时候,大小是0(粒子刚产生),在time 1的时候,大小是1,最大(粒子生命周期结束时)。 

调整曲线

        现在我们了解了粒子系统曲线编辑器的布局了,接下来我们来编辑一下曲线,让粒子的大小随着时间增大和变小。

        1. 首先可以尝试一下粒子系统曲线编辑器底部的预设曲线,选择其中的一种来看看效果。

        我们想要的曲线应该是一个倒U形的曲线(类似于向下开口的抛物线),可以知道这种曲线前段时间粒子会越变越大,后段时间会越变越小。预设曲线里并不存在,因此我们需要自定义。

        2. 选择下图中的预设曲线作为初始曲线

        3.  选择并向下拖动右上角的红色小圆圈(关键帧),让曲线终点的Size变到很小或0

        如果进行预览,会发现粒子变得非常小,这是因为曲线的最大值在0.3秒左右都到了,而且曲线的顶点也比较低。我们需要将曲线调高一点。

        4. 选择左下方的关键帧,我们会看到原点旁边有一个条线,线有一个端点用来调节。

        5. 拖拽上面的线的端点,向上移动,增加曲线高度。

         现在再来看看效果,如果对于效果不满意,我们就继续调整粒子系统的相关模块参数。详细的粒子系统模块的信息,可以参考Unity官方文档:

        Unity - Manual: Particle System modules

        对于制作好的烟雾特效,如果要复用,可以将其制作成预制体。

触发动画

        接下来我们用脚本来检测按键并完成点火和熄灭火堆的效果,同时带上烟雾效果。

        1. 在火堆的粒子系统的主模块中,确保Play on Awake被勾选,这个选项能保证火焰粒子效果能在它被添加到场景的时候自动播放。

        2. 在烟雾粒子效果的主模块中,确保Play on Awake被禁用(不要勾选)。我们要用脚本来触发这个特效的播放时机。

        做完上面两步后,可以看到火焰会保持燃烧,没有烟雾效果。

        3. 在项目窗口中,将CreativeCore_VFX->Scripts目录里的ToggleFireParticle脚本拖到Fire_ParticleSystem_Prefab物体上作为其组件。

        4. 在Fire_ParticleSystem_Prefab的Inspector中,拖动对应的Point Light(prefab的子物体),烟雾特效游戏物体到脚本的属性中。

        点击运行场景,按空格键可以实现点火和熄灭的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM学习(六):类加载子系统

目录 〇、前言 一、类加载子系统 1.1 内存结构概述 1.2 类加载器及类加载过程概述 1.2.1 类加载器 1.2.2 类加载过程 1.3 类加载过程一:Loading 1.3.1 加载过程 1.3.2 加载类的方式 1.4 类加载过程二:Linking 1.4.1 验证(Verify) 1.4.…

贯穿设计模式第八话--设计原则总结篇

🥳🥳🥳 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,我是最爱吃鱼罐头,大家可以叫鱼罐头呦~🥳🥳🥳 从今天开始,将…

在uos上编译opencv

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 下载源码并创建build文件夹 系统环境为操作系统为:UnionTech OS Server 20 Enterprise,处理器为: 华为鲲鹏处理器(ar…

C++11(上)

目录 1:列表初始化 2:std::initializer_list 3:变量类型推导 3.1:auto推导类型 3.2:decltype 3.3:nullptr 4:范围for 5:STL新增容器和容器新增接口 5.1:array 6:左值引用和右值引用 6.1:左值 6.2:右值 6.3:左值引用 6.4:右值引用 6.5:左值…

python常用库之time库

目录 一、前言time库中的常用函数 二、time()函数三、localtime()和gmtime()函数四、strftime() 、asctime()、mktime()函数(一)strftime()函数(二)asctime()函数(三)mktime()函数 五、ctime()函数六、stri…

【2023最新】超详细图文保姆级教程:App开发新手入门(5)

上文回顾,我们已经完成了一个应用的真机调试,本章我们来了解一下如何引入YonBuilder移动开发的(原生)移动插件, 并利用移动插件完成一个简单的视频播放器。 8. 「移动插件」的使用 8.1 什么是 「移动插件」? 用通俗…

TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5

原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的…

【高危】Apache Spark 权限提升漏洞(CVE-2023-22946)

漏洞描述 Apache Spark 是一款支持非循环数据流和内存计算的大规模数据处理引擎。 使用 spark-submit 脚本在集群中启动任务可以通过指定proxy-user参数限制运行用户。在 Apache Spark 受影响版本中,攻击者通过指定自定义的classpath,则可以覆盖该配置…

2023最新面试题-Java-3

IO流 1. java 中 IO 流分为几种? 按照流的流向分,可以分为输入流和输出流;按照操作单元划分,可以划分为字节流和字符流;按照流 的角色划分为节点流和处理流。 Java Io 流共涉及 40 多个类,这些类看上去很杂乱&…

ChatGPT 70+款可以免费使用的AI工具,建议收藏

ChatGPT风靡全球,人人可用! 小红书上有关ChatGPT的笔记已有10w篇,相关话题浏览量也达到了1.12亿次。其中讨论最为热烈的,要数“ChatGPT使用教程”。(当然,类似的话题还包括,教你如何使用Midjour…

Navicat图表查看器 Crack

Navicat图表查看器 Crack Navicat图表查看器是一个查看图表工作区文件的简单工具。您可以浏览Navicat的图表工具和Navicat图表创建者创建的区域。 Navicat图表查看器,将图表中的数据显示为强大的可视化效果,允许您使用图形和图表查看数据。 将您的信息转…

Internet Download Manager(IDM)v6.41.11 免激活不弹窗版

Internet Download Manager(IDM)v6.41.11 免激活不弹窗版可提升你的下载速度多达5倍,安排下载时程,或续传一半的软件。Internet Download Manager的续传功能可以恢复因为断线、网络问题、计算机宕机甚至无预警的停电导致下传到一半…

大数据开发必备面试题Flume篇合集

大数据开发必备面试题Flume篇合集 1 、详细介绍Flume有哪些组件?2、你是如何实现Flume数据传输的监控的?3、Flume参数怎么调优?4、简述下Flume的事务机制。5、 Flume采集数据会丢失吗?6、简述下Flume使用场景。7、简述下 Flume丢包问题。8、…

【C语言】文件操作

目录 1.为什么使用文件 2.什么是文件 2.1 程序文件 2.2 数据文件 2.3文件名 3.文件的打开和关闭 3.1文件指针 3.2文件的打开和关闭 4.程序的顺序读写 4.2对比一组函数 5.文件的随机读写 5.1 fseek 5.2 ftell 5.3 rewind 6.文本文件和二进制文件 7.文件读取结束的…

2023年银行理财子公司研究报告

第一章 行业发展概况 1.1 行业概况 所谓“银行理财子公司”,其实就是由商业银行作为控股股东发起设立的,并经国务院银行业监督管理机构批准;主要从事理财业务;独立于母行,具有独立法人地位的非银行金融机构。像工商银…

Redission分布式锁

实现过程: 只要线程一加锁成功,就会启动一个 watch dog 看门狗,它一个后台线程, 会每隔 10 秒检查一下,如果线程 1 还持有锁,那么就会不断延长锁 key 生存时间。因此,Redisson 解决了锁过期释放…

Commitizen规范git提交代码

首先全局安装Commitizen,运行: npm install -g commitizen 然后在项目中开启终端,安装cz-customizable npm i cz-customizable --save-dev 然后在package.json中配置如下代码: "config": {"commitizen":…

虹科干货| 虹科Redis企业版数据库:告别游戏卡顿,让快乐加速!

“卡顿一分钟,玩家两行泪” 游戏已成为年轻人最主要的消遣娱乐方式之一,游戏卡顿给玩家带来糟糕游戏体验背后的原因是什么?数据存储与查询速度不够快! 游戏开发领域,不仅拥有海量的数据,甚至还要做到实时…

Flowable6.x导出/查看/跟踪流程图

Flowable6.x导出/查看/跟踪流程图 项目源码仓库 Flowable诞生于Activiti,是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义,可以十分灵活地加入你的应用/服务/构架。 本文介绍4种绘制流程图的方式,前…

TryHackMe-Set(Windows渗透测试 | WinDefender免杀)

Set 您再次发现自己在Windcorp公司的内部网络上。上次你去那里的味道真好,你回来了 了解更多。 但是,这次他们设法保护了域控制器,因此您需要找到另一台服务器,并在第一次扫描时发现“Set”。 Set被用作开发人员的平台&#xf…