实战:一个可复用的"受击爆发"特效

把前四节串起来。目标:做一个通用受击特效 NS_ImpactBase,可以给剑击、枪击、魔法命中复用——通过参数区分表现。

第一步:拆解需求

通用受击在视觉上共有的元素:

  • 一闪而过的中心火光;
  • 向外扩散的冲击环(从地面看是一条横线);
  • 四散飞溅的碎片 / 火星;
  • 缓升的烟雾尾迹。

区分表现的参数:

  • User.ImpactColor(命中的元素色:火橙、冰蓝、毒绿);
  • User.ImpactScale(整体规模:小刀 0.5,AOE 2.0);
  • User.Direction(受击方向:碎片往这个方向多飞一些)。

第二步:分别做三个可复用 Emitter

Emitter 要点
NE_Burst_Spark 单次爆发 30 粒,短生命 0.3s,速度向外,重力下落
NE_Burst_Smoke 单次 15 粒,慢速上升 1.2s,半透明大 Sprite
NE_Burst_Ring 单次 1 个"粒子",用 Ribbon 或大 Sprite 缩放动画做扩散环

这三个 Emitter 是可复用零件,放进 _Shared/Emitters。此后弓箭命中、手榴弹爆炸都可以复用它们。

第三步:建 NS 并编排

System 里拖入三个 NE,轨道设置:火光 0s 进入、火星 0.02s 进入(稍微晚一帧,避免首帧穿模)、烟雾 0.1s 进入。总时长按烟雾的 1.2s 定。

第四步:暴露用户参数

在 NS 级暴露三个参数,并把它们穿透到每个 Emitter 的对应模块:

  • User.ImpactColor → 三个 Emitter 的颜色模块(Color 初始化);
  • User.ImpactScale → 每个粒子的初始速度大小与 Sprite Size 的缩放系数;
  • User.Direction → 火星 Emitter 的初始速度方向叠加。

"穿透"操作:在 NS 选中 Emitter 轨道 → 在参数上右键 → 直接把 Emitter 内的模块参数绑定到 User.XXX(多数版本会自动建议同名绑定)。

第五步:蓝图调用

// 伪代码
NS_ImpactBase 资产(DataTable 查到)
Spawn System at Location(命中点), Rotation(命中方向)
Set Vector Parameter "ImpactColor" = 元素色
Set Float Parameter "ImpactScale" = 武器规模
Activate
(AutoDestroy = true)

第六步:验证与迭代

  • 编辑器验证:在 NS 预览里直接拖动 User 参数,看各种取值下的表现是否都合理(尤其是 0.2 和 3.0 的极端值,常常暴露"写死"的参数);
  • 性能验证:stat Niagara 下连播 5 次,确认没有尖峰;
  • 联动验证:在一个场景里同时播 10 个(团战常见量级),帧率不掉才算过。

复盘:这样做值在哪里

做法 一次性成本 长期收益
3 个通用 Emitter + 1 个参数化 NS 约半天 之后所有"爆发类"特效零成本产出
参数表驱动播放 约 1 天 策划可自行配置新技能特效

这就是"可复用特效体系"的骨架。后面章节会继续讲用脚本做更复杂的行为,以及性能优化时如何守护这套结构。