ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

UE5 Niagara攻击特效制作:英雄联盟风格刀光与命中爆点全拆解

2026/10/6 11:01:48 拓冰建站 浏览量
UE5 Niagara攻击特效制作:英雄联盟风格刀光与命中爆点全拆解 这次我们来拆一个很多特效新手都想做的效果英雄联盟风格的攻击特效。这套效果在 MOBA 类游戏里非常常见人物出手的一瞬间武器带出弧形刀光命中时爆出亮眼火花地面留下拖尾痕迹镜头再配合震动和音效整个攻击的“手感”一下就出来了。本文不是搬运某个现成特效资产而是从 Niagara 系统出发把这类攻击特效拆成几个可独立制作的环节刀光拖尾、命中爆点、冲击波、材质发光、动画通知触发。每个环节都会给出具体的创建思路、模块配置和调试方法适合已经入门 UE 但还没系统做过粒子特效的开发者参考。这篇文章会围绕“国语双字”这个关键词多说一句教程本身以中文讲解再加中文字幕为例方便国内开发者直接跟着操作不需要再猜节点意思是干什么的。你只要跟着顺序做完就能得到一个可以在第三人称角色身上触发的近战攻击特效原型。重点不是复制某个英雄的最终效果而是掌握 Niagara 制作攻击特效的拆解思路。看完之后你可以把同样的方法迁移到手刀、剑气、炮击、爆炸等不同攻击类型上。1. 核心能力速览能力项说明项目类型UE 粒子特效制作教程以 Niagara 系统为主技术栈Niagara、材质编辑器、蓝图、动画通知适用引擎UE4 与 UE5 均可本文以 UE5 默认 Niagara 插件流程为例是否需要编程核心特效无需 C仅少量蓝图逻辑蓝图节点可以通过图表方式实现主要产出近战攻击刀光、命中爆点、冲击波、地面拖尾、发光材质触发方式动画通知 AnimNotify / 蓝图 Spawn Niagara System是否支持批量制作支持掌握一套流程后可批量替换材质、颜色、发射器参数是否含国语双字根据教程标题包含国语配音和中文字幕适合国内学习者推荐硬件普通 i5/16G 内存/任意支持 DX11 的显卡即可特效模拟占用较低学习难度中等适合已熟悉 UE 基础界面的开发者以上能力项中唯一需要你自己准备的是角色模型和武器模型。如果没有现成素材可以先用 UE 自带的第三人称模板角色和 BasicShape 模型临时替代功能流程完全一致。教程里重点讲的 Niagara 系统和材质逻辑并不依赖特定角色资产所以即使你现在手头没有任何游戏美术资源也能把整个特效系统跑通。2. 攻击特效拆解与制作思路英雄联盟风格的攻击特效看起来花哨实际上可以拆成四到五个独立层。每一层都可以单独先做、再叠加不要试图在一个发射器里解决所有效果。推荐拆分方式如下特效层次作用建议实现方式刀光挥舞表现攻击轨迹让玩家看清“这一下劈到了哪里”Niagara Ribbon 发射器按武器移动轨迹生成条带打击火花命中瞬间的爆发光点强化顿挫感GPU Sprite 发射器发射 30~80 个粒子冲击波命中位置向外扩散的环形光效Sprite 或 Mesh 发射器缩放半径透明度渐隐地面痕迹强化攻击方向和落点常见于技能范围平面 Mesh 或 Ribbon叠加半透明材质光晕与镜头反馈整体氛围提升通常配合后处理或蓝图震屏Niagara 外发光、相机轻微震动制作顺序建议是先做刀光再做命中爆点最后叠加冲击波和地面痕迹。原因很简单刀光决定攻击是否“看得清楚”命中爆点决定攻击是否“打中了”冲击波和地面痕迹则用来丰富细节。如果一开始就把所有层混在一个 Niagara 系统里调试时很难判断到底是哪个模块出了问题。这套流程的核心不是单个节点的参数而是“发射器分层 材质叠加 蓝图触发”。后面每一章都会按照这个思路往下走。3. 环境准备与前置条件在开始前先确认你的 UE 工程已经包含以下条件。3.1 基础软件要求Unreal Engine 5.0 及以上版本UE4.26 以后也支持相同 Niagara 流程。Windows / macOS / Linux 均可Windows 下开发调试最方便。显卡建议支持 DirectX 11显存 4G 以上即可粒子特效对显存要求并不高。如果使用 UE5建议把项目设置为 DirectX 12 或默认的 SM5否则部分高级发光材质效果可能显示不一致。3.2 启用 Niagara 插件在 UE 5 中 Niagara 插件默认启用。如果你的项目是早期版本或手动关闭过插件需要按下述流程开启打开菜单 “编辑” - “插件”。搜索 “Niagara”。确保 “Niagara”、“Niagara Core”、“Niagara Extended” 均处于勾选状态。如果修改了插件状态重启编辑器并重新编译着色器。3.3 创建项目目录结构建议在 Content 下创建专门的目录方便后续批量制作特效时统一管理。以下命令可以在终端中快速创建目录结构# 在项目 Content 目录下创建 FX 专用目录 mkdir -p FX/Materials mkdir -p FX/Textures mkdir -p FX/NiagaraSystems mkdir -p FX/NiagaraEmitters mkdir -p FX/Blueprints mkdir -p FX/Assets实际目录名可以根据你自己项目规范调整。关键是 NiagarSystem、Emitter、Material、Texture 分开存放。英雄联盟攻击特效通常会涉及几十个资产如果不从一开始就分类后面替换英雄特效时会非常痛苦。3.4 准备用于特效的“假资产”没有现成美术资源时可以先用引擎默认资源代替刀光用引擎自带的 Plane 或 Ribbon 即可Ribbon 不需要模型直接由粒子位置生成。火花默认圆形贴图 SoftSphere或者引擎自带粒子专用的 T_Particle 系列贴图。冲击波可以用 Plane 模型也可以用 NIagara 里的 Sprite 配合圆环贴图。地面痕迹使用 Cylinder 或 Plane 模型调整缩放压扁后放在地面。如果后续想要更接近端游效果建议去市场中下载一些免费的 MG 特效纹理包、光效贴图包或者使用 Blender 自己生成一圈环状渐变纹理。纹理的精度不需要太高512×512 基本够用。3.5 确认场景光照模式攻击特效大多使用 Additive 混合方式不发光的模型本身会在半透明混合模式下显得灰暗。制作时最好把粒子材质设成 Unlit无光照。同时场景中需要有一个补充亮度用的环境光或定向光否则特效在纯黑背景里看不出层次。建议创建一个简单的室内测试场景背景使用中等灰度的纯色不要使用天空盒光照泄漏这样更容易观察特效的透明度与发光强度。4. 创建 Niagara 攻击特效系统这里开始进入实际制作环节。首先创建一个空的 Niagara 系统用来管理多个发射器。4.1 新建 Niagara 系统在 Content Browser 中进入FX/NiagaraSystems目录。右键 - FX - Niagara System。选择 “New system from a template”模板选择 “Empty”。命名为NS_Attack_Slash_Hero。空的 Niagara 系统打开后最左侧是系统级参数中间是发射器栈右侧是预览视口。建议先在预览视口里把背景改为纯色关闭网格显示然后开始添加发射器。4.2 发射器类型选择Niagara 中发射器有两种常见类型CPU 和 GPU。发射器类型适合场景优点缺点CPU数量少、逻辑复杂、需要碰撞检测支持所有模块方便调试性能上限低GPU大量粒子、火花、拖尾、动态模糊性能高适合批量粒子部分模块兼容性有限调试不如 CPU 直观对于攻击特效建议把刀光拖尾做成 GPU 发射器火花爆点也做成 GPU 发射器而冲击波和地面痕迹这类粒子数量少的可以使用 CPU 发射器。这样既能保证特效密度又不会拖累性能。4.3 添加第一个发射器刀光 Ribbon右键系统面板选择 “Add Emitter” - “Empty”然后重命名为E_Slash_Trail。在发射器栈上你会看到几个关键区域Emitter Properties、Emission、Particle Spawn、Particle Update、Render。每一个模块在默认状态下可能是空的需要手动添加。攻击特效里最核心的模块包括Emission控制粒子生成方式。Initialize Particle设置粒子初始化状态。Update Particle每帧更新粒子属性。Ribbon Renderer渲染条带。Color / Scale / Position 模块控制外观动态。先给发射器添加 Ribbon Renderer这是制作刀光的关键。Ribbon 通过按顺序连接发射器里的粒子生成一条带状网格。粒子的间隔越小条带越平滑粒子生命周期结束或移动到远离发射器时条带会断开。为了让刀光跟随武器挥动需要把刀光粒子的位置绑定到骨骼或插槽上。最简单的做法是让 Niagara 的粒子使用 “Particles Position” 模块并在蓝图里每帧更新粒子位置。这部分会在后面“蓝图触发与同步”章节展开。现在先在发射器栈中添加以下模块模块作用建议参数Spawn Burst Instantaneous每次攻击触发瞬间生成一批粒子Spawn Count 30Initialize Particle初始化粒子位置、速度、生命周期Lifetime 0.3 ~ 0.5sScale Sprite Size / Scale Ribbon Size控制条带宽度变化初始 10结束 0Color控制条带颜色随生命周期变化淡黄色 - 白色 - 透明Ribbon Renderer渲染条带Face Camera 开启Tessellation 按距离注意如果你使用的 Ribbon Renderer发射器的 Renderer 类型必须是 Ribbon Renderer不能在 Sprite Renderer 上直接切换。一个发射器只能有一个激活的 Renderer。4.4 创建刀光材质刀光 Ribbon 需要一个半透明、发光的材质。在FX/Materials目录新建材质M_Attack_Slash。材质属性设置属性值Blend ModeAdditiveShading ModelUnlitTwo Sided开启使用发光通道可以开启但不强制材质节点中把贴图采样连接到不透明度和自发光颜色。为了让刀光有拉扯感可以在 UV 上叠加一个 Vector2D 的扭曲值或者使用 Sine 函数微调透明度。最简单的验证方式是先用纯白贴图颜色从黄色到红色过渡。材质编辑器里的节点连接参考Texture Sample (T_Particle_Flare) - Multiply - Emissive Color Constant (1.0) - Multiply - Opacity Vertex Color - Multiply - Emissive Color / Opacity这里 Vertex Color 由 Niagara 粒子颜色带入这样同一个材质可以驱动不同英雄的刀光颜色不需要每次新建材质。使用 Vertex Color 就能在 Niagara 系统中调整粒子颜色然后表现为刀光颜色。5. 刀光拖尾特效制作刀光是攻击特效的主体下面详细说明如何让 Ribbon 拖尾随着武器挥动产生弧形效果。5.1 生成粒子与绑定位置攻击发生时武器会从起点快速挥到终点。如果只是让 Ribbon 粒子发射后保持静止条带就会是一条直带不会出现弧形。要得到弧形刀光需要让粒子跟随武器骨骼移动。在 Niagara 中使用 “Initialize Particle” 模块来设置初始位置。建议添加一个 “User” 系统参数叫做WeaponTipPosition然后在蓝图里每帧把这个位置从武器插槽传递到 Niagara 系统。Niagara 参数绑定方式在系统面板添加 User Parameter类型为 Vector。名称命名为User.WeaponTipPosition。在刀光发射器中在 Initialize Particle 的位置表达式里选择User.WeaponTipPosition。然后每个粒子的位置继承这个动态参数。如果每一帧都更新这个位置Ribbon 就会形成连续的拖尾。5.2 让刀光有弧度和宽度变化有了基础拖尾后可以通过以下模块优化添加Noise (Curl Noise)模块到 Particle Update让刀光边缘产生微小波动。添加Scale Curve到 Particle Update让刀光的宽度在生命周期从宽到窄形成锐利收尾。添加Color Over Life让刀光从亮白渐变到半透明再渐隐为橙色增强消耗感。调整 Ribbon Renderer 的Tessellation参数开启按距离细分避免刀光出现锯齿。一个比较实用的参数组合如下参数建议值说明Lifetime0.25 ~ 0.4s太长会拖出残影太短则看不清轨迹Ribbon 顶点数16 ~ 32太少不圆润太多会消耗性能粒子速度0位置由外部绑定不需要自身速度Curl Noise Strength40 ~ 80数值太大会导致刀光像麻绳不推荐Ribbon Width初始 15结束 0形成渐变刀锋感透明度初始 0.9结束 0避免硬切导致闪白5.3 刀光的基础验证调整完成后先在预览视口中测试点击 “Preview” 菜单中的 “Loop” 循环播放观察刀光是否在武器移动路径上产生平滑条带。如果不出条带先检查 emit 和 spawn 是否被触发如果条带不完整检查 Ribbon Renderer 的 “Ribbon 连接模式”建议改为 “Custom Ribbon Connectivity”。刀光的颜色可以先统一用白黄渐变后续通过材质里的 Vertex Color 调整成各英雄风格。这一步做完你的攻击特效已经具备 60% 的识别度。6. 命中爆点与冲击波特效攻击命中时刀光需要配上一个短暂而猛烈的爆发效果才能让玩家感受到打击顿挫感。这个部分建议单独使用一个 GPU 发射器。6.1 创建火花爆点发射器新增加一个发射器E_Impact_Spark按照以下模块配置模块建议配置Spawn Burst InstantaneousSpawn Count 50Initialize ParticlePosition 0Lifetime 0.3 ~ 0.6sInitialize ParticleRandom Position 范围 ±5Add Velocity在初速度方向随机扩散速率 200~800Drag阻尼系数 1.5让粒子快速减速Gravity Force关闭或设小值用于火花表现Color Over Life从白到黄到橙到透明Scale Sprite Size初始 8结束 0Sprite Renderer使用 Additive BlendFace Camera 开启火花爆点的核心是“快速出现、快速消失、亮度高”。如果粒子数量太少爆发感不足如果太多镜头下会糊成一团。50 个粒子、生命周期 0.4 秒、初始半径 8在普通分辨率的第三人称视角下效果比较适中。如果你的场景相机距离角色更近相应要减少大小。6.2 添加冲击波环冲击波环可以用另一个 Sprite 发射器或平面模型实现。推荐使用 Sprite 发射器并使用圆环贴图。创建E_Impact_Shockwave发射器Spawn Burst 为 1 个粒子。位置在命中点向上偏移 10 单位防止穿模。粒子生命周期设为 0.5 秒。Particle Update 中增加Scale Sprite Size从 0 到 500使用Exponential或Linear曲线。透明度随生命周期从 0.8 降到 0。渲染使用 Additive Blend。如果希望冲击波贴地面可以把粒子位置的 Z 轴压平例如在 Update 模块中约束 Z 0并将 Sprite 朝向改为 “Horizontal” 模式。在 Niagara 中Sprite Renderer 有 “Alignment” 选项选择 “Horizontal” 后粒子正面朝上适合放在地面上。6.3 命中位置如何传入冲击波和火花爆点都需要知道攻击命中位置。最简单的做法是使用射线检测在角色武器攻击的动画通知中从武器插槽向前发射一条射线。若射线打到敌人或地面记录 Hits 的第一个点的位置。把该位置传递给 Niagara 系统参数例如User.ImpactPoint。调用 Niagara 系统的SpawnSystemAtLocation或激活相应发射器。这部分逻辑放到第 8 章“蓝图触发与同步”里详细说明。现在先把整个特效系统的工作方式理解清楚刀光绑定武器位置火花和冲击波绑定命中点两者通过同一套蓝图触发。7. 材质与光照优化攻击特效在多数情况下使用自发光材质光照的影响可以忽略。但我们仍然需要处理好透明排序、亮度控制、材质编译这三个问题。7.1 发光材质的核心设置草草制作的发光材质常常出现整个刀光过曝或发灰发黄的问题。推荐材质配置如下材质属性建议值Blend ModeAdditiveShading ModelUnlitOpacity Mask 不需要半透明即可材质域Surface可接收雾关闭减少距离雾干扰使用深度偏移按需开启避免穿插闪烁7.2 颜色驱动不要在材质里写死颜色。使用 VertexColor 作为主要驱动。Niagara 的粒子颜色传到材质后你可以使用一个ScalarParameter控制整体亮度再使用另一个参数控制颜色强度。例如Texture Sample - Multiply - VertexColor VertexColor.A - Multiply - Opacity Constant3 (Color) - Multiply - Emissive Color FinalMultiplier - Multiply - Emissive Color这套材质的优点是同一个材质可以复用到所有攻击特效中只要在 Niagara 发射器里修改粒子颜色就能变成冰蓝色、火焰红或者是草绿色不需要为了换颜色而重新制作材质。7.3 避免全屏过亮很多新手做发光特效时习惯把 Emissive 强度调到 20 甚至更高结果特效在场景中像是爆炸白洞。推荐正常状态下的 HDR 强度在 3~8 之间命中瞬间可以短暂调到 12 左右。材质上可以用一个Constant节点控制基础强度后续再通过 Material Parameter Collection 或 Niagara User Parameter 动态拉高。7.4 半透明排序如果场景中同时存在刀光、火花、冲击波需要合理设置渲染顺序。Niagara 中可以通过发射器的渲染优先级调节。习惯上刀光放在最底层火花次之冲击波和光晕最上层。如果出现透明排序异常表现为粒子被后面物体遮挡或闪烁可以在发射器栈的 Render 部分调整Sort Priority或者改用Translucency Pass延迟渲染。最简单的方法是保证每个发射器使用独立的半透明材质不要共用同一个材质实例却使用不同混合模式。8. 蓝图触发与动画同步特效做出来后最终要由角色对局逻辑触发。这里只讲最简单通用的做法用 AnimNotify 触发 Niagara。8.1 在动画资产中添加 AnimNotify打开攻击动画资产在时间轴上找到武器挥到中间位置的关键帧右键添加 AnimNotify命名为AN_AttackSlash。然后在 AnimNotify 里添加事件调用。具体思路获取角色 Mesh 上的武器插槽位置。在插槽处生成 Niagara System 刀光。武器挥到指定位置后触发命中检测。在命中点生成火花与冲击波。8.2 蓝图节点逻辑示例以下是一种参考实现// 伪代码实际请按节点图连线 Event: AnimNotify_AttackSlash - Mesh - Get Socket Location (WeaponSocket) - Get Actor Rotation - Spawn Niagara System (NS_Attack_Slash_Hero) - Attach Niagara Component to Mesh (WeaponSocket) // 使用 LineTraceByChannel 检测攻击范围 - Start Location WeaponSocket World Location - End Location Start Character Forward Vector * 200 - LineTraceByChannel - Hit Return Value: 命中位置 - Spawn Niagara System (NS_Impact_Hero) at Hit Location - Play Sound / Gameplay Cue实际工程中攻击判断可以使用动画通知状态机、GameplayAbility 或 Collision 检测。这里给出的是最小可运行逻辑一条射线、一个生成特效、一个音效播放。8.3 让刀光跟随武器移动如果刀光只是生成一次不跟随武器那 Ribbon 就会固定在一个位置无法形成挥动轨迹。解决办法有两种把 Niagara 组件 Attach 到武器骨骼插槽并将发射器的位置更新模式设为“跟随组件”。或者每帧从蓝图获取武器位置写入 Niagara User Parameter粒子位置实时跟随。推荐使用 User Parameter 方式因为独立于引擎的物理模拟调试更方便且不会受骨骼插槽匹配影响。比如在角色蓝图 Tick 中每帧更新武器插槽的位置Event Tick - Mesh - Get Socket Location (WeaponSocket) - Set Niagara Variable (User.WeaponTipPosition) on Niagara Component注意刀光发射器的粒子位置要使用User.WeaponTipPosition这样粒子才会根据你传入的新位置依次生成拖尾。如果把粒子位置绑定到Particles.InitialPosition之类的旧参数更新逻辑可能失效。8.4 触发时机调整实战中刀光应与攻击前摇错开一点。英雄联盟近战攻击的流程是“起手 - 前摇 - 挥舞 - 命中 - 后摇”。建议把生成刀光的 AnimNotify 放在“挥舞”开始的地方把命中爆点放在“挥舞”结束的地方两者间隔约 0.08~0.15 秒。这样视觉上有“先出刀、再爆点”的层次感。如果你直接把刀光和命中爆点放在同一帧生成玩家会感觉攻击缺少停顿和节奏感。9. 性能优化与常见问题攻击特效虽然单个粒子的数量不多但多个英雄在同一场景中同时释放技能时性能问题会被放大。下面给出几个优化建议和常见问题排查表。9.1 性能优化清单粒子数量控制单次刀光粒子不超过 30 个火花不超过 80 个冲击波 1~2 个。如果英雄是远程法师火花可以适量增加但不要超过 150。生命周期控制攻击特效整体生命周期建议在 0.5~0.8 秒内结束避免特效残留干扰玩家视野。使用 GPU 发射器大量粒子时优先使用 GPU 发射器CPU 发射器在粒子数超过 200 后性能下降明显。使用 Actor Pooling如果英雄短时间内频繁攻击建议循环使用 Niagara Component而不是每次攻击都 New Actor 再销毁。Niagara 系统本身支持循环合理控制系统重新激活即可。关闭不需要的碰撞火花粒子如果有Collision模块会大量消耗性能除非需要火花弹到地面反弹否则直接关闭。减少后处理影响设置粒子材质不读取场景深度或使用无光照材质可以有效降低半透明填充过量带来的卡顿。9.2 控制台视角观察粒子性能在编辑器预览中可以通过控制台命令查看粒子数量# 开启 Niagara GPU 调试 r.Niagara.GpuComputeDebug 1 # 查看粒子统计 stat Niagara # 查看场景整体性能 stat GPUstat Niagara是排查“为什么特效卡”的最直接手段能够看到总粒子数、每个发射器的粒子数以及渲染耗时。如果“Niagara - Total”过高优先降低粒子数量而不是盲目降低画面质量。9.3 常见问题排查问题现象可能原因排查方式解决方案刀光不显示发射器没有生成粒子或材质不可见检查 Spawn Count、Material Blend Mode给发射器加 Spawn Burst材质改为 Additive刀光是直线没有弧度粒子位置没有跟随武器移动查看 User.WeaponTipPosition 是否实时更新在角色 Tick 中更新武器位置参数刀光断裂成一段一段Ribbon 连接属性问题检查 Ribbon Renderer 使用方式切换为 Custom Ribbon Connectivity 或调整崩断距离火花爆点太糊粒子尺寸太大或贴图对比度低缩小 Scale使用中心亮边缘淡的贴图换 T_Particle_Flare 类贴图冲击波穿模进地面Z 轴高度未处理检查粒子位置与旋转将位置 Z 固定为地面高度调整 Sprite Alignment特效排序闪烁多个透明发射器重叠查看渲染顺序与排序优先级调整 Sort Priority开启深度偏移材质整体过曝Emissive 强度过高检查材质亮度节点强度改为 3~8命中瞬间再局部提亮攻击未命中但特效已爆射线检测时机或距离错误Debug 射线确认 Hit 结果调整攻击范围与射线长度9.4 避免版本不一致踩坑UE4 的 Niagara 与 UE5 的 Niagara 在部分模块名称上有差别。如果你打开工程后找不到某些模块先确认是哪个版本的引擎再按对应版本的模块名称搜索。建议不要打开两个不同大版本的项目来回切材质编译时间和 Niagara 兼容性都可能出问题。10. 总结与下一步这套英雄联盟攻击特效的 Niagara 流程并不复杂核心是把特效拆成刀光、火花、冲击波、材质和蓝图触发五个部分。最先要验证的不是最终效果而是刀光 Ribbon 是否跟随人物武器移动。只要这一步跑通后面叠加火花和冲击波只是时间问题。如果你打算把这个流程用到自己的游戏里建议先从一个简单的球状模型测试开始用纯白材质把刀光形状调满意再换正式美术资源。最容易踩的坑有两个一是 Niagara 发射器选错了 Renderer 类型二是忘记在蓝图里实时更新武器位置。把这两个点处理好整个特效完成度会明显提升。下一步可以继续扩展的方向加入 Material Parameter Collection 实现全屏幕闪白反馈加入 Niagara 的 Audio 模块让粒子命中时驱动音效把系统参数暴露给数据驱动资产这样不同英雄的攻击特效只需要换颜色和贴图不需要再复制整套蓝图。只要掌握了这种“发射器分层 参数驱动”的思路英雄联盟风格的攻击特效就可以快速迁移到几乎所有近战技能里。