实战:一个可复用的"受击爆发"特效
把前四节串起来。目标:做一个通用受击特效 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 天 | 策划可自行配置新技能特效 |
这就是"可复用特效体系"的骨架。后面章节会继续讲用脚本做更复杂的行为,以及性能优化时如何守护这套结构。
