
做游戏技能特效时Niagara 是我用过之后最难以割舍的一套工具。早期用 Cascade 做粒子功能和表现力都够但一旦遇到“死亡能量扩散”“符文扩散”“魂体上升”这类需要大量粒子叠加控制的复杂效果模块化程度不够的问题就会被放大。Niagara 的整套结构更像一个“粒子行为框架”它把粒子的一生拆成发射、初始化、更新、渲染多个阶段每一阶段都可以单独控制和驱动非常适合做死神这类高表现力技能特效。本文就以“死神特效”为实战主题完整拆解一套 Niagara 从资源准备、系统搭建、材质绑定到蓝图与 C 调用的全过程。无论是刚接触 Niagara 的新人还是已经做过基础粒子、想打磨技能特效质量的进阶开发者都能在这篇文章中找到可复用的经验。我还会把常见问题、排查思路和性能优化方法一并整理出来。Niagara 学习资料虽然不少但大多是零散讲解单个模块真正能落地的“完整技能特效案例”很少。希望通过这篇教程你能把 Niagara 的关键模块串起来做出属于自己的第一个高质量技能特效。1. 背景与核心概念1.1 死神特效的视觉语言先聊一个很有意思的问题做“死神”题材特效到底在做哪些东西抛开具体玩法从视觉语言上看死神特效通常包含几个固定元素死亡气息黑灰色烟雾、低饱和度的弥散粒子用来表现“死亡降临”的氛围。灵魂与亡魂半透明、青绿色或淡紫色上升粒子表现被收割的灵魂。符文与印记地面上出现的圆环、符号、扩散光圈这类元素很容易让玩家感知到“技能范围”。能量冲击波从中心向四周扩散的环状能量配合颜色和透明度变化形成爆发感。镰刀、骨骼等具象元素用网格渲染器生成带有明确轮廓的物体。在实际游戏中死神技能通常不是单一特效而是“多重发射器叠加”的结果。一个完整的 Niagara 系统里可以同时存在多个发射器分别负责符文、魂体、冲击波、烟雾再通过统一参数控制整体节奏。这就是 Niagara 相比传统 Cascade 最大的优势之一结构清晰、复用性强。1.2 Niagara 是什么Niagara 是虚幻引擎中的下一代视觉特效系统。和旧版粒子系统 Cascade 相比它的核心区别在于数据驱动的框架。模块化的发射器和粒子逻辑。强大的 GPU 粒子支持。支持与蓝图、C 深度交互。可结合音频、物理、数据接口NDI做更复杂的表现。简单说Niagara 把一个粒子系统拆分成“系统System—发射器Emitter—粒子Particle—模块Module—渲染器Renderer”五个层级。每个发射器可以控制自己的生成方式、粒子生命周期、力的影响和渲染类型模块之间可以复用和重新组合。用 Cascade 做特效时你的思路往往是“在粒子里加点速度、加点颜色、加点大小”用 Niagara 时你的思路会变成“为每个发射器设计一套独立的行为模型”。这种思维的转变是学习 Niagara 最重要的一步。1.3 为什么用 Niagara 做死神特效死神特效的特点决定了它特别适合用 Niagara粒子数量大。亡魂飘散、烟尘扩散往往需要上千甚至数千粒子同时存在。Niagara 的 GPU 发射器可以承担大规模粒子运算。控制维度多。死神特效不只是“粒子飞出去”还需要颜色、大小、透明度、旋转、噪声扰动、碰撞响应等多个属性协同变化。Niagara 支持按模块控制每个属性。需要动态参数。特效释放时玩家位置、技能范围、等级不同特效颜色和强度也会变化。Niagara 把参数暴露到外部蓝图或 C 可以实时修改。方便加入不同渲染器。同一个特效里可以混合使用 Sprite四边形粒子、Ribbon条带、Mesh模型网格和 Light光源渲染器直接决定了死神技能特效可以做得非常丰富。2. 环境准备与版本说明2.1 引擎版本与工具本文示例以 UE5.x 的 Niagara 为准UE4.26 以上版本界面基本一致如果你已经在用 UE4 的较新版本完全可以直接对照操作。UE5 中 Niagara 的默认界面做了部分调整但核心模块名称和参数逻辑没有本质变化。建议使用以下环境Unreal Engine 5.xUE5.3 或 UE5.4 常见版本。启用内置 Niagara 插件默认开启。使用 Visual Studio 2022 或 Rider for Unreal Engine进行 C 调用时需要。准备好一个第三人称模板或空模板项目便于测试特效在场景中的表现。如果你使用的是 UE4.26、UE4.27本文涉及的 Niagara 模块和蓝图节点同样适用只在部分 UI 布局上略有差异。2.2 项目设置在开始之前打开项目设置确认以下设置Rendering 中确认支持目标平台为 Desktop / Console / Mobile 的合适选项。确认项目启用了 Niagara 插件Edit → Plugins → FX → Niagara。如果希望在移动端使用粒子需要在 Niagara 发射器中避免使用过多高精度计算并合理限制粒子数。不需要额外安装第三方插件Niagara 是虚幻引擎的内置模块这也是它作为实时特效系统最大的便利之处。2.3 需要准备的美术资源制作死神特效前我们需要几类基础资源冒烟贴图用于制作黑色烟雾和灰白色死亡气息的 Sprite 贴图。发光圆点贴图用于制作符文的能量粒子一般选择边缘柔和的径向渐变贴图。环状贴图或网格用于制作地面扩散符文、冲击波环。可选模型资源镰刀模型、骷髅模型、亡魂模型等用于网格渲染器。基础材质一个不受光照影响的 Emissive 材质。如果没有现成贴图可以直接在引擎中创建一个基础材质用引擎自带的Gradient和Noise节点生成类似效果也可以先用纯色材质测试功能后续再替换资源。3. Niagara 核心概念与常用模块拆解3.1 系统、发射器、粒子与渲染器在 Niagara 中一个特效文件称为 Niagara System它的结构如下Niagara System └── Emitter 1例如地上符文 ├── Emitter Update发射器生命周期、生成数量 ├── Particle Spawn粒子出生时初始化 ├── Particle Update粒子每帧更新 └── RendererSprite / Ribbon / Mesh └── Emitter 2例如亡魂粒子 └── ...理解这一层级非常重要系统是整个特效的容器。发射器是一组粒子的集合可以设置自己的更新频率和生命周期。粒子是发射出来的个体。模块负责给粒子或发射器添加属性逻辑比如速度、大小、颜色、受力等。渲染器决定粒子在屏幕上如何显示。做死神特效时我一般把“地面符文”和“亡魂”拆成两个发射器因为它们的生命周期、渲染方式、更新逻辑完全不同。千万别把复杂的特效堆在单个发射器里否则后期维护会非常痛苦。3.2 Spawn 与粒子生命周期Niagara 中控制粒子生成有三种常见模块Spawn Rate每秒钟生成多少粒子适合烟雾、魂体这类持续生成的粒子。Spawn Burst Instantaneous瞬间生成指定数量粒子适合爆炸、符文绽放这类一次性爆发效果。Spawn Per Frame每帧生成指定数量粒子适合精确控制数量。粒子从生成到销毁的时间由 Lifetime 控制。粒子生成后会在每一帧经过 Particle Update 模块更新位置、速度、颜色和其它属性直到生命周期结束。3.3 Initialize 与 Particle StateNiagara 中每个粒子在出生时都会经过初始化过程常用模块包括Initialize Particle设置粒子的初始位置、速度、颜色、大小、生命周期等。Set Particle Position直接设置粒子位置。Set Particle Velocity设置粒子的初速度。比如亡魂粒子的初始化可以设置为Initial Velocity: 向上方向速度 50 - 200 随机 Initial Color: 淡青紫色 Lifetime: 3 - 5 秒随机3.4 Update 模块噪声、力、颜色变化粒子更新阶段是最容易做出效果的环节。常用的模块包括Drag空气阻力让粒子减速。Gravity Force重力模拟烟雾缓慢上升或下降。Noise噪声力让粒子产生不规则抖动用于表现魂体的漂移感。Vortex Force涡旋力让粒子围绕某个轴旋转表现回旋能量。Scale Sprite Size控制粒子大小的变化曲线。Color Module随生命周期改变粒子颜色。Alpha 淡出模拟粒子消散。对于死神特效中的亡魂我会使用“向上初速度 噪声扰动 透明度淡出”的组合让粒子看起来像灵魂被抽离地面并逐渐消散。3.5 渲染器Sprite、Ribbon 与 Mesh 的选择Niagara 渲染器决定了粒子的显示方式常用的有以下几种Sprite Renderer四边形粒子始终面向摄像机适合烟雾、火花、点光效果。Ribbon Renderer连接粒子形成条带适合死亡气息的拖尾、能量锁链、光束。Mesh Renderer将模型网格实例化为粒子适合镰刀碎片、骨头碎片、石块等。Light Renderer把粒子当作光源适合能量核心。死神特效中地面符文可以用 Sprite Renderer 叠加发光贴图表现能量冲击波可以用 Ribbon Renderer 做弧形拖尾镰刀模型则用 Mesh Renderer 放入。4. 完整实战从零搭建“死神仪式”特效下面进入核心环节。我们将做一个“死神仪式”技能特效包含三个部分地面死亡符文瞬间展开的发光圆环与符文粒子。亡魂飘散大量灵魂粒子从地面向上飘出。能量冲击波从中心向外扩散的冲击能量。这个案例覆盖面广能够串起 Niagara 大多数关键模块而且视觉效果足够量级适合学习。4.1 创建项目结构和基础材质先在 Content 目录下建立清晰的结构避免资源混乱。Content/ ├── FX/ │ ├── Materials/ │ ├── Niagara/ │ └── Textures/创建基础材质步骤在 Content Browser 中右键 → Material命名为M_Death_Emissive。打开材质将 Blend Mode 设置为Translucent或Additive。将 Shading Model 设置为Unlit这样材质不受光照影响只靠 Emissive 发光。增加两个参数Tint颜色、Opacity不透明度。材质节点连接思路Tint 参数Vector → Multiply → Emissive Color 纹理贴图 → Sample Texture2D → Multiply → Opacity Opacity 参数Scalar → Multiply → Opacity Mask这一步的目的是让后续所有粒子都可以复用同一个材质再通过 Niagara 中的粒子参数动态修颜色和透明度。4.2 创建 Niagara 系统在 Content Browser 右键 → FX → Niagara System选择 “New system from a new emitter” 创建空白系统重命名为NS_DeathRitual。打开 Niagara 编辑器后我们会在系统中添加三个发射器Emit_GroundRuneEmit_SoulParticlesEmit_ShockWave4.3 制作地面死亡符文Emit_GroundRune地面符文表现的是“地面上突然出现一个扩散的发光圆环”同时伴随符文粒子亮起。右键添加发射器选择Empty发射器然后在发射器面板中配置Emitter Update 阶段Emitter Life: Loop false Spawn Burst Instantaneous: Spawn Count 200 Spawn Time 0.0这里使用Spawn Burst Instantaneous而不是Spawn Rate因为符文是一次性爆发效果粒子只需要在技能释放的瞬间全部生成。Particle Update 阶段Scale Sprite Size: Scale X 50 - 150 Scale Y 50 - 150 Alpha: Alpha 1.0 - 0.02 秒内消散 Color: Color 深紫 - 淡蓝为了让符文更像“地面扩散”而不是“面对摄像机的小点”需要对粒子进行对齐处理。在 Renderer 中把对齐模式设置为Unaligned或用 Velocity Alignment 控制方向。如果希望符文有指针旋转感可以添加一个Rotate Around Point模块使粒子围绕中心点旋转。这个模块适合制作技能法术阵、召唤阵。4.4 制作亡魂飘散Emit_SoulParticles亡魂粒子是整个死神特效的灵魂所在。视觉上要表现“大量半透明的灵魂从地面升起又慢慢消散”。创建新的空发射器配置如下Emitter Update 阶段Spawn Rate 300 Emitter Life 3.0sParticle Spawn 阶段Initialize Particle: Lifetime 3 ~ 5 秒随机 Velocity 随机方向向上为主0-50, 100-300, 0-50 Color 淡绿色 / 淡蓝紫色 Scale 15 ~ 40 随机Particle Update 阶段Noise Force Noise Strength 50 Frequency 1.5 Drag 0.5 Alpha Alpha 曲线从 0.2 到 0峰值在生命周期 20% 时达到 0.8 Scale 10 - 60 逐渐变大这里的核心是“向上速度 噪声力 透明度曲线”。如果没有噪声粒子只会直线上升效果非常呆板噪声力让粒子路径变得扭曲像是在空气中挣扎的灵魂。为了让亡魂看起来更柔和Renderer 使用 Sprite Renderer材质使用M_Death_Emissive并且开启加色混合模式。4.5 制作能量冲击波Emit_ShockWave能量冲击波通常表现为一个圆环向外扩张可以用 Mesh Renderer 加载环形模型也可以用粒子序列实现。如果手头没有环状模型最方便的方式是使用 Sprite Renderer 配合环形贴图Emitter Update 阶段Spawn Burst Instantaneous: Spawn Count 1 Lifetime 1.5sParticle Update 阶段Scale 0 - 500随生命周期线性放大 Alpha 1.0 - 0.3 Color 紫色 - 蓝白色这一步感觉简单但实际视觉效果却很好一个巨大的发光环从中心扩散出去配合地面上符文亮起瞬间把技能的“范围感”拉满。如果你有环状模型资源也可以改用 Mesh Renderer记得在 Renderer 中开启光照并给模型一个半透明 Emissive 材质。4.6 蓝图与 C 调用 Niagara 特效Niagara 系统做好后我们通常在蓝图或 C 中按技能触发时机生成它。蓝图调用最常用的节点是Spawn System at Location。节点输入System选择NS_DeathRitualLocation技能落点Rotation技能角度Scale缩放Auto Destroy勾选粒子播放完毕自动销毁如果你想将特效绑定到角色骨骼上可以使用Spawn System Attached节点输入Attach Component为角色骨骼组件。C 调用示例下面是 C 中生成 Niagara 特效的核心代码片段// 文件路径Source/YourProject/Public/DeathSkillActor.h #pragma once #include CoreMinimal.h #include GameFramework/Actor.h #include NiagaraFunctionLibrary.h #include NiagaraComponent.h #include DeathSkillActor.generated.h UCLASS() class YOURPROJECT_API ADeathSkillActor : public AActor { GENERATED_BODY() public: ADeathSkillActor(); UFUNCTION(BlueprintCallable, Category DeathSkill) void PlayDeathEffect(FVector SkillLocation, FRotator SkillRotation); };// 文件路径Source/YourProject/Private/DeathSkillActor.cpp #include DeathSkillActor.h ADeathSkillActor::ADeathSkillActor() { PrimaryActorTick.bCanEverTick false; } void ADeathSkillActor::PlayDeathEffect(FVector SkillLocation, FRotator SkillRotation) { // 生成Niagara特效 UNiagaraComponent* FXComponent UNiagaraFunctionLibrary::SpawnSystemAtLocation( GetWorld(), DeathEffect, SkillLocation, SkillRotation, FVector(1.0f, 1.0f, 1.0f), true ); if (FXComponent) { // 可以在这里继续设置变量 FXComponent-SetVariableFloat(TEXT(Intensity), 1.5f); FXComponent-SetVariableVec3(TEXT(TintColor), FLinearColor(0.2f, 0.1f, 0.5f)); } }需要你在头文件中声明UPROPERTY(EditAnywhere, Category FX) class UNiagaraSystem* DeathEffect;然后在编辑器中将NS_DeathRitual拖入该变量即可。这里需要特别强调的是SpawnSystemAtLocation只是生成特效特效内部的循环、生命周期需要自己在 Niagara 发射器中控制。如果特效是长时间存在的比如符文持续 5 秒、亡魂持续 4 秒建议在发射器中设置 Auto Destroy 或循环次数避免特效一直挂在场景中。4.7 参数暴露与动态控制Niagara 系统做好后如果想在技能升级时改变颜色和强度不应该修改资源文件而应该把参数暴露为 User Parameter。操作步骤在 Niagara 系统面板中点击User Parameters标签。创建Float参数命名Intensity。创建Vector参数命名TintColor。在粒子模块中将颜色、大小等属性引用这两个参数。然后在蓝图中Spawn System at Location生成后获取 Niagara 组件 → Set Niagara Variable FloatFloat Intensity → Set Niagara Variable Vec3Vector TintColor这样同一个特效资源就能根据技能等级、玩家属性显示不同颜色和强度。这也是项目中复用特效的标准做法。5. 常见问题与排查思路下面整理这套死神特效制作过程中最常见的几个坑问题现象常见原因解决思路粒子完全看不到材质不受光或 Alpha 为 0检查材质是否使用 Unlit 发光检查 Alpha 曲线是否有值粒子呈黑色或灰暗材质受到光照影响将 Shading Model 改为 Unlit并将 Emissive 颜色提高地面符文朝向不对Renderer 对齐模式不合适将 Sprite Renderer 的 Alignment 改为 Unaligned 或自定义平面粒子瞬间消失Lifetime 设置过短检查 Lifetime 是否足够建议初始化为 1-5 秒大量粒子导致掉帧CPU 发射器粒子数过多改用 GPU 发射器或降低 Spawn Rate/LOD特效重复播放不销毁Emitter Life 未设置 Loop 或 Auto Destroy 未开启设置 Emitter Life 循环次数配合蓝图 Auto Destroy蓝图无法设置变量变量不是 User Parameter在 Niagara System 面板中将变量提升为 User Parameter特效在移动端效果差粒子溢出或材质过于复杂减少粒子数量改用加色混合简化材质排查步骤建议按下面顺序进行先在 Niagar 编辑器中点击 Preview确认系统内粒子有没有生成。如果系统内没有粒子检查 Spawn 模块和 Lifetime。如果系统内有粒子但游戏中看不到检查项目内容是否会剔除特效以及 Actor 是否在场景中。最后检查材质和渲染器设置。最常用也最容易忽略的是“材质透明度”问题。很多粒子出生时 Alpha 默认是 1但材质 Blend Mode 是 Opaque透明度不会生效表现就会非常奇怪。6. 最佳实践与工程建议6.1 目录与命名规范一个项目的特效资源可能非常多如果命名混乱后期没人能维护。建议按如下方式组织Content/FX/ ├── Materials/ 材质资源 ├── Niagara/ Niagara 系统 ├── Textures/ 贴图资源 └── Meshes/ 模型资源命名建议材质M_Death_Emissive纹理T_SoftCircle_01、T_Smoke_04Niagara 系统NS_DeathRitual、NS_Player_AOE_01Niagara 发射器Emit_GroundRune、Emit_SoulParticles用前缀区分资源类型是虚幻项目通用做法Niagara 特效也不例外。6.2 把参数暴露给外部控制永远不要在 Niagara 资源里写死所有颜色和大小。把关键属性暴露为 User Parameter通过蓝图或 C 动态设置才能实现特效复用。技能升级、Buff 强弱、皮肤变化都依赖动态参数。建议暴露的参数颜色Vector方便不同皮肤或流派改变特效颜色。强度Float影响粒子大小或发光亮度。持续时间Float配合战斗节奏调整。范围半径Float影响技能范围表现。6.3 性能与 ScalabilityNiagara 特效性能优化有几个实用手段区分 CPU 发射器和 GPU 发射器大量粒子使用 GPU 发射器少量高精度粒子使用 CPU。使用 LOD在 Niagara System 的 Scalability 中设置低配机型减少粒子数量。关闭不必要的碰撞和力计算碰撞非常耗性能死神特效如果不需要物理碰撞不要开启碰撞模块。限制粒子数量上限每个发射器设置最大粒子数防止极端情况下溢出。使用 PoolingNiagara System Pooling 可以避免频繁创建销毁带来卡顿。移动端尤其要注意粒子数控制在 200-500 以内材质尽量使用 Additive避免过多半透明混合。6.4 使用模块复用与发射器模板Niagara 的模块可以保存为资产在不同系统中复用。比如“噪声力模块”“Alpha 淡出模块”“颜色渐变模块”都是通用模块。建议将常用模块保存到 Content 目录中避免每个特效重复创建。发射器也可以右键保存为发射器模板。比如“亡魂飘散发射器”可以在多个技能中复用只需要调整颜色和数量。6.5 调试信息与日志Niagara 编辑器左上角有调试按钮可以查看当前粒子数量、执行时间、平均耗时。养成查看 Debug 面板的习惯能很快发现性能瓶颈。C 中也可以通过FXComponent-GetNumParticles()查看粒子数量变动辅助逻辑判断。7. 总结与学习路线这篇教程从一个相对完整的“死神技能特效”案例出发把 Niagara 的系统层级、发射器配置、模块逻辑、渲染器选型、蓝图与 C 调用、参数暴露、性能优化串到了一起。相信你已经对“一个特效是怎么从零做出来并接入游戏”有了整体感觉。Niagara 的进阶方向还有很多NDI 数据接口可以结合骨骼位置实时生成粒子Niagara Ribbon 能做更复杂的拖尾和锁链Niagara Fluid 可以模拟流体Python 脚本能批量处理特效资产。建议下一步结合你的实际游戏项目先做一个简单的技能特效再从这五个方向中选择一个深入配合骨骼插槽做武器拖尾。利用 NDI 数据接口做角色表面粒子吸附。使用 Ribbon Renderer 做能量锁链。用 Niagara 做环境交互雨滴落在平面上溅开。结合 Gameplay Ability System 做技能特效联动。最后提醒一下Niagara 学习不要只看不练。你可以在引擎里随便找一张发光贴图先搭一个只有 Sprite 发射器的小系统试着加噪声力、改颜色曲线再逐步叠加新的发射器。把今天文章里的NS_DeathRitual案例完整做一遍之后很多模块之间的关系自然就清晰了。如果这篇教程对你有帮助可以随手收藏备用。遇到 Niagara 相关问题也欢迎在评论区把你的报错或截图描述出来大家一起交流排错经验。