数据接口:读骨骼、距离场与网格

数据接口(Data Interface,DI)是 Niagara 访问引擎数据的桥梁。它把外部数据"搬"到模拟里,让粒子响应游戏世界。

常用 DI 一览

DI 能读到什么 典型用途
Skeleton DI 骨骼骨骼的世界变换 粒子沿角色骨骼分布、武器拖尾
Static Mesh DI 网格表面采样点 表面散布的灰尘 / 附着物
Distance Fields DI 全局距离场(场景的 SDF) 粒子被墙体推开、贴表面流动
Niagara Data Channel 其他 NS 写入的共享数据 A 特效触发 B 特效、骑乘的烟雾尾迹
Sphere / Box Query 在发射器周围做范围查询 粒子聚集到范围内目标

实例:让粒子沿角色骨骼流动

经典案例——"角色身上有能量粒子沿骨骼游走":

  1. Emitter 里加 Skeleton DI,绑定到角色的骨骼资产或运行时 Actor;
  2. 自定义脚本模块里 MapGet 取某根骨骼的世界位置;
  3. 粒子的目标速度 = 骨骼位置 - 粒子位置(再乘个系数),形成"粒子被骨骼吸引"的效果;
  4. 每 N 帧切换一个骨骼索引,粒子的目标就在各个骨骼间转移。

注意 CPU/GPU 的支持差异:Skeleton DI 支持 CPU 模拟与有限的 GPU 模拟;距离场 DI 主要是 GPU 端设计。在动手前先确认你的目标平台支持该 DI 组合,否则打包后才发现不工作是痛苦的事。

数据接口使用的两条纪律

  1. DI 的绑定对象要稳定。如果 Skeleton DI 绑定的 Actor 在播放中被销毁,粒子会"失去目标"——记得在逻辑销毁时先停掉对应 NS。
  2. DI 查询是有代价的。距离场的 MapGet 在粒子数上万时也有开销,用它之前先用一个小规模 prototype 量一下。

想在多个 NS 之间共享数据(如"爆炸影响后续的烟"),了解官方的 Niagara数据通道。