效果图
第一部分: 分析
闪电效果制作方式众多, 传统的有序列图/模型, 也有闪电算法计算出. 这里思路是借用 UE4 的 Ribbon 配合一部分闪电算法来实现闪电的形态模拟. 这里稍微说下这边用到的闪电形态计算思路.
我们先确定下起点和终点 A,B ,并且分成若干段
接下来我们给这条线段上每个点一段随机的位移, 红点为位移之后的位置.
然后重新连接下线段.
现在获得了一个波折的线段.接下来只需要修改随机的大小.就能稍微模拟单条闪电的效果了.(分支可以用 Spawn 事件重复生成)
第二部分: 用到的模块
主要是自定义 Spawn 位置模块.
第三部分: 步骤
- 新建一个发射器, 模块以及系统. 然后将默认发射器的速度和位置删掉,
Render改为Ribbon,并且将发射方式改为Burst
- 接下来编写闪电位置模块, 打开自定义模块, 使用范围改为
Particle Spawn.
首先我们解决第一个问题, 怎么让生成的粒子按我们想要的方式排列起来,也就是实现上面算法的第一步
起点和终点好办, 我们可以自己设定值.那么如何起点和终点之间将粒子均匀插入进去?
这里我们需要获得 粒子的生成顺序, Nia 提供了这一数据节点是 ExecutionIndex
可以类似理解为 For 循环的 i ,这个值表示的就是当前粒子序号.比如生成了 10 个粒子, 那么根据生成先后, 返回 index. 第一个粒子返回 0 ,以此类推.
现在,问题简单了. 我们知道总共生成了多少个粒子(这里我设置的是 10 个), 知道总长度(起点减终点), 也知道每个粒子的生成序号. 那么每个粒子在线段的位置我么也就确定了.
额外要注意的是, Index 从 0 开始计数.
左边三个变量前缀都是 Module 表示是模块自身变量, 也就是外部可以暴露修改的.我们给定了一个起点, 一个终点, 以及生成粒子的总和.
根据 序号/总数 , 我们确定了每个粒子在起点终点之间的位置. 并且指定了正确的 LinkOrder
如果顺利的话你将得到一条白线, 注意设置值, (也可以在模块脚本里面给默认值)
接下来我们解决第二个问题, 让每一个点有位移. 这个简单. 在把位置输出到 Particle Position 之前, 我们加一个随机值即可.
而随机值我们想让这个随机值 在不同位置有不同的效果,这里可以用 Curve 曲线工具
Cascade 我们就经常使用. Curve 取值是根据 x 轴取曲线上的值. 基本上需要差异取值的时候,请第一时间想到 Curve
我们有每个粒子的百分比, 那么可以将其作为 x 轴,然后使用曲线采样值取得不同的值.
(ps, Curve 使用 CurveForFloats)接下来你应该获得了一个这样的形状
有那么一点闪电的样子了. 右边 curve 默认没有, 点击 黄色的还原按钮 就出来了. 下面的随机值
点击右边 三角标 把数据改成 范围随机 (Uniform Ranged) .
将发射器放到系统中就搞定了.
最后完善细节, 这个就不详细讲了. 基本上前面都提到过,比如
- 再添加一个曲线用来控制
RibbonWidth使其粗细不均更像闪电的形态; - 在系统中添加三个发射器, 每个发射器的闪电形态都不太一样. 形成组合效果;
- 修改颜色,忽闪忽暗,形成爆点;
- 蓝图直接设置
EndPosition位置实现精确打击; - 给粒子加一些力的移动,让闪电更有动感.或者做出弧形闪电.
等等等等
大家加油.