UE4 Particle Systems
粒子系统是视觉效果的关键组成部分。它们使艺术家可以轻松地创造出爆炸、烟雾和雨水等效果。
虚幻引擎 4 有一个强大且易于使用的系统来创建称为 Cascade 的粒子效果。该系统允许创建模块化效果并轻松控制粒子行为。
- 创建粒子系统
- 设置粒子的速度和大小
- 调整粒子产生率
- 使用曲线缩放粒子在其生命周期内的大小
- 使用 Cascade 设置粒子颜色
- 使用蓝图激活和停用粒子系统
- 使用蓝图设置粒子颜色
入门
下载起始项目并解压缩。导航到项目文件夹并打开SpaceshipBattle.uproject。
按播放开始游戏。按住左键进行射击并使用W、A、S和D移动。
在本教程中,将创建两个粒子效果。一个用于船舶的推进器,一个用于船舶爆炸时。要创建这些,将使用粒子系统。
什么是粒子系统?
顾名思义,粒子系统是创建和管理粒子的系统。粒子基本上是空间中的一个点。使用粒子系统,可以控制粒子的外观和行为。
粒子系统由一个或多个称为发射器的组件组成。这些负责产生粒子。
发射器也有称为模块的组件。模块控制发射器产生的粒子的特定属性。例如,粒子的材料和初始速度。在下面的示例中,使用两个模块为每个粒子赋予红色圆圈材质和随机速度。
还可以更改粒子在其生命周期内的颜色。在此示例中,粒子的颜色从红色变为蓝色:
现在知道什么是粒子系统,是时候为船的推进器创建一个了。
创建粒子系统
导航到ParticleSystems文件夹并单击添加新\粒子系统。将粒子系统重命名为PS_Thruster然后打开它。
Cascade:粒子系统编辑器
Cascade 由四个主要面板组成:
- 视口:此面板将显示粒子系统的预览。可以通过按住鼠标右键并移动鼠标来环顾四周。要移动,请按住右键单击并使用WASD键。
- 详细信息:选择的任何组件(发射器、模块等)都将在此处显示其属性。如果未选择任何内容,它将显示粒子系统的属性。
- 发射器:此面板将从左到右显示发射器列表。每个发射器显示其模块的列表。
- 曲线编辑器:曲线编辑器允许可视化和调整模块曲线的值。并非所有模块属性都支持曲线。
现在,粒子系统使用默认的粒子材质。
首先,将用圆形材质替换粒子材质。
将材质应用于粒子
转到 Emitters 面板并选择Required模块。
Required 模块包含必要的属性,例如粒子材质和发射器持续时间。每个发射器都必须有一个 Required 模块。
要更改材质,请转到 Details 面板并将Material设置为M_Particle。这会将粒子的外观更改为橙色圆圈。
接下来,将把粒子系统附加到玩家的飞船上。
附加粒子系统
返回主编辑器并导航至Blueprints文件夹。打开BP_Player,然后转到“组件”面板。
要使用粒子系统,可以使用粒子系统组件。创建一个并将其重命名为ThrusterParticles。确保将它附加到Collision组件。
要指定粒子系统,请转到“详细信息”面板并找到“粒子”部分。将模板设置为PS_Thruster。
接下来,将ThrusterParticles的位置设置为(-80, 0, 0)。这会将它放在船的后面。
最后,将旋转设置为(0, 90, 0)。这将调整粒子系统的方向,使粒子远离飞船。
单击编译,然后返回到主编辑器。按Play查看粒子系统的效果。
粒子系统正在运行,但粒子移动有点太慢而且非常小。可以通过设置粒子的初始速度和大小来解决此问题。
设置粒子的速度和大小
首先,将设置粒子的初始速度。打开PS_Thruster,然后选择Initial Velocity模块。然后,展开Start Velocity\Distribution。
默认情况下,粒子的初始速度范围从(-10, -10, 50)到(10, 10, 100)。
要以更快的速度将粒子从船上移开,需要做的就是增加Z速度。将Min Z设置为300并将Max Z设置为400。
这是原始速度和新速度之间的比较:
接下来,将设置粒子的初始大小。
设置粒子大小
选择Initial Size模块,然后转到 Details 面板。然后,展开Start Size\Distribution。
与 Initial Velocity 模块一样,Initial Size 也有最小和最大范围。但是,对于本教程,会将大小设置为一个常量值。为此,将Distribution设置为Distribution Vector Constant。
注意:分布允许指定恒定值、范围内或曲线上的值。还可以使用蓝图设置值。要了解更多信息,请前往虚幻引擎文档中的 分发页面。
然后,将Constant设置为(70, 70, 70)。下面是尺寸对比:
返回主编辑器并按Play。
粒子看起来好多了,但它们之间的距离仍然很远。这是因为粒子生成之间的持续时间过长。要解决此问题,可以提高产卵率。
增加粒子生成率
要提高产卵率,需要使用Spawn模块。该模块控制发射器产生粒子的速度。除了 Required,每个发射器都必须有一个 Spawn 模块。
打开PS_Thruster,然后选择Spawn。转到 Details 面板,然后展开Spawn\Rate部分。
将常量设置为50。这会将生成速率提高到每秒 50 个粒子。
返回主编辑器并按Play。
如所见,它现在看起来更像是一条小路。为了使粒子看起来更像推进器火焰,可以随着时间的推移缩小它们。
随着时间的推移缩小粒子
打开PS_Thruster,然后转到 Emitters 面板。
要缩小粒子,可以使用Size By Life模块。该模块将在其生命周期内对粒子的大小应用乘数。通过右键单击发射器中的空白区域并选择Size\Size By Life创建一个。
默认情况下,这对粒子的大小没有视觉影响。这是因为乘数始终设置为 1。要缩小粒子,需要调整模块的曲线,使大小乘数随时间减小。但首先,什么是曲线?
什么是曲线?
曲线是点的集合。每个点都有两件事:一个位置和一个值。
当你有两个或更多点时,你就形成了一条线。下面是一个基本线性曲线的例子。点 A的位置和值为0。点 B 的位置为2,值为1。
如果在任意位置对线性曲线进行采样,其功能类似于线性插值。例如,如果在上面的位置1对曲线进行采样,将收到一个值0.5。
如果你创造一条下降的曲线,你得到的价值就会逐渐变小。这是要用于按寿命调整模块的曲线类型。
现在,将在 Cascade 中创建上面的曲线。
修改模块的曲线
选择Size By Life,然后转到 Details 面板。然后,展开Life Multiplier\Distribution\Constant Curve\Points。在这里,将看到Life Multiplier曲线的点列表。
In Val是点在曲线上的位置。对于Size By Life,值为0表示粒子生命的开始。值为1表示粒子生命的结束。
要随时间减小大小乘数,需要减小第二个点的Out Val 。**将点 1的Out Val设置为(0, 0, 0)。随着时间的推移,这会将粒子的大小减小到 0。
可以使用曲线编辑器可视化生命倍增曲线。为此,请单击按寿命调整模块上的图形图标。
这会将Life Multiplier添加到曲线编辑器。要使曲线适合视图,请单击曲线编辑器中的适合。
如所见,在粒子的生命周期内,大小乘数从 1 减少到 0。
返回主编辑器并按播放
粒子现在看起来更像火焰!要添加到此粒子系统的最后一件事是颜色变化。
添加颜色变化
要使用 Cascade 设置粒子的颜色,需要正确设置粒子材质。导航到Materials文件夹并打开M_Particle。
目前,颜色是在材质中设置的。要使用粒子系统中的颜色,需要使用ParticleColor节点。
首先,删除连接到Emissive Color 的节点。接下来,添加一个ParticleColor节点并像这样连接它:
如果还想控制粒子的不透明度,请添加一个乘法并像这样连接它:
单击Apply然后关闭M_Particle。
要设置粒子的颜色,可以使用初始颜色模块。
初始颜色模块
打开PS_Thruster,然后添加一个Initial Color模块。可以在“颜色”类别下找到它。
要添加颜色变化,需要指定颜色的范围。为此,可以使用分布。
选择初始颜色,然后转到详细信息面板。展开Start Color部分并将Distribution更改为Distribution Vector Uniform。这将允许为每个颜色通道指定一个范围。
对于本教程,颜色应从橙色到红色。为此,将Max设置为(1.0, 0.0, 0.0)并将Min设置为(1.0, 0.35, 0.0)。
如果查看视口,会注意到颜色表现异常。
这是因为Color Over Life模块不断将颜色更新为白色。要解决此问题,请选择Color Over Life并按Delete。的模块列表现在应该如下所示:
关闭PS_Thruster,然后在主编辑器中按Play 。看看那些推进器的火焰!
接下来,将学习如何根据船是否在移动来切换粒子系统。
切换粒子系统
要检查船是否在移动,可以检查玩家是否按下了任何移动键。
打开BP_Player并找到Event Tick节点。将以下设置添加到节点链的末尾:
让我们来看看这个设置的作用:
- 这将检查MoveUp和MoveRight轴映射。如果两者都返回0,则意味着玩家没有按下任何移动键。
- 如果Branch返回true(玩家没有按下任何移动键),则停用ThrusterParticles
- 如果Branch返回false(玩家正在按下移动键),则激活ThrusterParticles
单击Compile,然后关闭BP_Player。按播放并在移动和不移动之间切换以查看切换。
现在到了有趣的部分了:创建一个爆炸粒子系统!
创建爆炸效果
将复制推进器粒子,而不是创建新的粒子系统。导航到ParticleSystems文件夹,右键单击PS_Thruster并选择Duplicate。将其重命名为PS_Explosion然后打开它。
对于爆炸,所有粒子应该同时产生而不是一个接一个。这被称为突发发射。
创建突发
首先,需要将生成率设置为零,因为不想使用默认的生成行为。选择Spawn模块并将Spawn\Rate\Distribution\Constant设置为0。
接下来,需要告诉发射器想要创建一个突发。向下滚动到Burst部分并向Burst List添加一个新条目。可以通过单击+图标来执行此操作。
每个条目将包含三个字段:
- 计数:产生多少粒子。将其设置为20。
- Count Low:如果大于或等于 0,则生成的粒子数量将介于Count Low和Count之间。将其保留为-1。
- 时间:何时产生粒子。值 0 表示发射器生命周期的开始。值为 1 表示发射器的生命周期结束。将其保留为0.0。
注意:可以在Required*模块中找到发射器的持续时间。它在*持续时间部分下列为发射器持续时间。
这意味着发射器将在其生命周期之初生成**20 个粒子。
为了使它看起来像爆炸,需要设置速度以使粒子向外移动。
向外移动粒子
由于这是一个自上而下的游戏,只需指定 X 和 Y 速度。选择Initial Velocity模块并展开Start Velocity\Distribution。将最大值设置为(1000, 1000, 0)并将最小值设置为(-1000, -1000, 0)。
通过指定从负到正的范围,粒子将从发射器向外移动。
接下来,需要设置发射器应循环的次数。
设置发射器循环
默认情况下,发射器将无限循环。这对于火焰和烟雾等效果非常有用,但爆发应该只播放一次。要解决这个问题,需要告诉发射器只循环一次。
选择Required模块,然后找到Duration部分。将发射器循环设置为1。
现在,是时候播放敌人死亡时的爆炸了!
敌人死亡时生成粒子
返回主编辑器并导航至Blueprints文件夹。打开BP_Enemy,然后找到OnDeath事件。
要生成粒子系统,可以在 Location节点使用 Spawn Emitter。创建一个并将其连接到Destroy Actor。
接下来,将Emitter Template设置为PS_Explosion。
最后,创建一个GetActorLocation并将其连接到Location引脚。
现在,当一个敌人死亡时,它会在敌人的位置产生一个PS_Explosion实例。
单击编译,然后返回到主编辑器。按播放键开始射击一些坏人。
看看那些爆炸!接下来,将通过使它们与敌人颜色相同来为它们添加一些额外的香料。
将爆炸颜色更改为敌人颜色
要使用敌人的颜色,需要一种从蓝图接收该信息的方法。幸运的是,Cascade 具有允许这样做的分发类型。
打开PS_Explosion并选择Initial Color模块。将Start Color\Distribution设置为Distribution Vector Particle Parameter。
这将为提供一个可以使用蓝图设置的参数。将参数名称设置为PrimaryColor
对于爆炸,将使用敌人的两种颜色。要使用第二种颜色,将需要另一个发射器。右键单击发射器上的空白区域并选择Emitter\Duplicate and Share Emitter。这将复制发射器。
会注意到现在每个模块旁边都有一个+号。通过使用Duplicate and Share Emitter而不是Duplicate,已经链接了模块而不是复制它们。在一个模块中所做的任何更改也会在另一个发射器的同一模块中发生。如果想更改所有发射器的属性(例如大小),这将很有用。
需要更改的唯一模块是Initial Color。但是,如果进行更改,两个发射器都会收到更改。在这种情况下,不希望链接模块,因为它们需要单独的参数名称。取消链接的最简单方法是删除重复的Initial Color模块并创建一个新模块。
注意:截至撰写本文时,还没有取消链接模块的内置方法。
选择新的Initial Color并将Start Color\Distribution设置为Distribution Vector Particle Parameter。接下来,将参数名称设置为SecondaryColor。
至此,粒子系统就完成了。关闭PS_Explosion。
接下来,需要使用蓝图设置参数。
使用蓝图设置粒子参数
打开BP_Enemy ,然后在**Spawn Emitter at Location之后添加高亮显示的节点:
这将允许在PS_Explosion中设置两个参数。
现在,需要设置正确的参数名称。将第一个Set Color Parameter 的Parameter Name*设置为*PrimaryColor*。将第二个*Set Color Parameter的参数名称设置为SecondaryColor
最后,需要提供颜色。为了方便起见,颜色已经存储在变量PrimaryColor和SecondaryColor中。像这样将每个变量连接到它们各自的节点:
这是你最终应该得到的:
让我们回顾一下事件的顺序:
- 当敌人死亡时,它会在其位置产生一个PS_Explosion实例
- 将设置PS_Explosion的PrimaryColor参数
- 将设置PS_Explosion的SecondaryColor参数
单击Compile,然后关闭BP_Enemy。按播放并开始射击敌人,看看粒子混乱!
看看那些多汁的颗粒。看看你是否可以在玩家死亡时添加爆炸!
- 打开BP_Player并找到OnDeath事件
- 将Spawn Emitter at Location节点添加到Sequence的Then 1引脚。将发射器模板设置为PS_Explosion。
- 创建一个GetActorLocation并将其连接到Location 的 Spawn Emitter的Location引脚
- 创建一个Set Color Parameter并将其连接到Location 处的 Spawn Emitter。将参数名称设置为PrimaryColor并将PrimaryColor变量连接到Param。
- 创建另一个Set Color Parameter并将其连接到第一个Set Color Parameter。将参数名称设置为SecondaryColor并将SecondaryColor变量连接到Param。