用途
该技能面向在 Unreal Engine 5.8 中通过 C++ 驱动 Niagara 视觉特效的场景。Niagara 以插件形式随引擎提供(Engine/Plugins/FX/Niagara,默认启用)。游戏代码通过 UNiagaraFunctionLibrary 和 UNiagaraComponent 生成并驱动系统,通过数据接口和 Niagara Data Channels 向其输入结构化数据,并通过组件池化和 UNiagaraEffectType 可扩展性控制开销。
主要能力
- 系统与组件模型:UNiagaraSystem 资产持有 FNiagaraEmitterHandle 数组,发射器分为 Standard(有状态、脚本化)与 Stateless(轻量)两种模式;UNiagaraComponent 为运行时实例。
- 生成系统:SpawnSystemAtLocation 用于世界位置的一次性特效,SpawnSystemAttached 用于附着式持续特效;另有 WithParams 重载接受 FFXSystemSpawnParameters 结构体。
- 生命周期控制:Activate、Deactivate、DeactivateImmediate、ResetSystem、ReinitializeSystem、SetPaused、SetAutoDestroy、SetDesiredAge、SeekToDesiredAge、AdvanceSimulation 等。
- 设置 User 参数:提供 SetVariableFloat、Int、Bool、Vec2、Vec3、Vec4、LinearColor、Quat、Matrix、Position、Object、Actor、Material、StaticMesh、Texture、TextureRenderTarget 等 setter,以及带 out 参数的 getter。
- 数据接口:通过 UNiagaraFunctionLibrary 的类型化辅助函数绑定骨骼网格、静态网格、纹理等;数组数据接口通过 UNiagaraDataInterfaceArrayFunctionLibrary 逐帧推送玩法数据。
- 自定义数据接口:子类化 UNiagaraDataInterface,实现 GetFunctionsInternal、GetVMExternalFunction、Equals、CopyToInternal,GPU 支持需 ProvidePerInstanceDataForRenderThread 等。
- Niagara Data Channels:作为玩法代码与 Niagara 之间、以及独立系统之间的受支持桥接,通过 Writer 发布元素、Reader 读取元素,并支持订阅回调。
- 完成回调:OnSystemFinished 为动态多播委托,处理函数需为 UFUNCTION()。
- 模拟缓存、轻量发射器、组件池化、可扩展性与 Tick 行为等主题。
使用方式
在模块的 PublicDependencyModuleNames 中添加 "Niagara";当子类化 UNiagaraDataInterface 时还需添加 "NiagaraCore"。作者在 Niagara 编辑器中把参数放入 User. 命名空间以暴露给 C++,只有 User.* 参数可在运行时覆盖,System.、Emitter.、Particle.、Module. 均为模拟内部参数。setter 接受带命名空间前缀的 FName,名称或类型不匹配时静默无操作。
适用场景
需要在游戏 C++ 代码中程序化生成、控制 Niagara 特效,向特效推送玩法数据,或在系统之间传递 VFX 消息的开发者。
限制
资料针对 UE 5.8,API 依据 5.8 头文件验证,旧形式列于“Deprecated — do not use”。SpawnSystemAtLocation 在专用服务器上以及预剔除检查拒绝时返回 nullptr,需始终判空。SetAsset 默认会重置已有覆盖参数。ManualRelease 组件若不释放会泄漏。曲线数据接口在 bUseLUT 默认开启时,键编辑仅在烘焙构建中生效(除非创作时关闭 bUseLUT)。搜索参数重载为旧路径,不支持较新的通道类型。