数据接口:读骨骼、距离场与网格
数据接口(Data Interface,DI)是 Niagara 访问引擎数据的桥梁。它把外部数据"搬"到模拟里,让粒子响应游戏世界。
常用 DI 一览
| DI | 能读到什么 | 典型用途 |
|---|---|---|
| Skeleton DI | 骨骼骨骼的世界变换 | 粒子沿角色骨骼分布、武器拖尾 |
| Static Mesh DI | 网格表面采样点 | 表面散布的灰尘 / 附着物 |
| Distance Fields DI | 全局距离场(场景的 SDF) | 粒子被墙体推开、贴表面流动 |
| Niagara Data Channel | 其他 NS 写入的共享数据 | A 特效触发 B 特效、骑乘的烟雾尾迹 |
| Sphere / Box Query | 在发射器周围做范围查询 | 粒子聚集到范围内目标 |
实例:让粒子沿角色骨骼流动
经典案例——"角色身上有能量粒子沿骨骼游走":
- Emitter 里加 Skeleton DI,绑定到角色的骨骼资产或运行时 Actor;
- 自定义脚本模块里
MapGet取某根骨骼的世界位置; - 粒子的目标速度 = 骨骼位置 - 粒子位置(再乘个系数),形成"粒子被骨骼吸引"的效果;
- 每 N 帧切换一个骨骼索引,粒子的目标就在各个骨骼间转移。
注意 CPU/GPU 的支持差异:Skeleton DI 支持 CPU 模拟与有限的 GPU 模拟;距离场 DI 主要是 GPU 端设计。在动手前先确认你的目标平台支持该 DI 组合,否则打包后才发现不工作是痛苦的事。
数据接口使用的两条纪律
- DI 的绑定对象要稳定。如果 Skeleton DI 绑定的 Actor 在播放中被销毁,粒子会"失去目标"——记得在逻辑销毁时先停掉对应 NS。
- DI 查询是有代价的。距离场的 MapGet 在粒子数上万时也有开销,用它之前先用一个小规模 prototype 量一下。
想在多个 NS 之间共享数据(如"爆炸影响后续的烟"),了解官方的 Niagara数据通道。
