跳转到内容

打击感的构成与实现

本章从设计理论出发,梳理动作游戏打击感的感官维度分类,并以近战攻击为完整案例,演示索敌、受击判定与双侧表现的实现流程。

类别具体手段
角色动画攻击前摇蓄力/剪影、攻击轨迹/刀光、攻击后摇/惯性
命中反馈顿帧 Hit Stop / 卡肉(根据武器重量、锋利程度及力度决定)
受击表现受击位移、受击硬直(受击动画)
视觉特效接触点特效——溅血/火花/烟尘(方向通常与受击方向相反)
环境互动地面/草被扰动
屏幕特效全屏暗角、后处理效果
相机震屏(方向与攻击方向一致,幅度与伤害量相关)、镜头推拉/变焦/特殊镜头
类别具体手段
音效分层挥动层、撞击层(材质区分 / 重击强低频)、残响层(空间回声)
动态反馈音调变化、暴击特殊处理
类别具体手段
手柄震动震动层级区分——强度、方向性、阻尼
输入与时机输入缓冲——当前动作结束前缓存玩家输入,按优先级无缝衔接下一动作
受击时停顿帧 Hit Stop——改变玩家的按键输入节奏

近战攻击命中效果:命中点特效(紫色/蓝色 VFX)+ 法力值回复提示(+MANA!)

3.2 以近战攻击为例,说明索敌、受击判定与表现在项目中的实现

Section titled “3.2 以近战攻击为例,说明索敌、受击判定与表现在项目中的实现”
  1. 触发阶段

    玩家输入鼠标左键 (IA_LightAttack) 激活轻攻击 Ability,系统启动 LightAttack ComboGraph,并立即执行 GetLightAttackTarget 函数进行目标检索。

  2. 广域筛选

    以角色为圆心执行 Sphere Overlap(半径 x),获取范围内除自身外的所有 Pawn 类 Actor。若无结果则函数结束。

  3. 精细筛选(三步过滤)

    步骤内容
    标签检查剔除不含 Attackable 标签的 Actor(过滤友军/非交互物),将未被剔除的加入 HitActors 数组
    距离校验剔除距离大于 AttackAttachMinDist(大吸附距离)的目标
    最优择取选择距离玩家最近的 Actor 作为最终 Target Actor

索敌逻辑蓝图(Sphere Overlap 广域筛选 + 标签/距离三步过滤)

PIE 运行时敌人受击效果 — 命中点橙色特效 + NavMesh 调试轮廓

当 ComboGraphCollision 检测到武器判定框与物体重叠时,广播 On Hit Registered 事件,随即执行以下逻辑:

  1. 目标筛选

    获取 Hit Result 中的 Hit Actor,检查其是否持有 Attackable 标签。只有持有该标签的 Actor(敌人)才触发后续逻辑,否则直接终止。

  2. 伤害与事件分发

    确认为合法目标后,调用 Report Damage Event 函数,传入受击者、施害者及伤害数值。

  3. GAS 事件负载构建

    使用 Make GameplayEventData 构建事件数据包,通过 Ability Target Data from Hit Result 将物理碰撞结果转换为 GAS 可识别的数据格式。

  4. 发送 Gameplay Event

    向玩家自身 (Self) 发送带有 Event.Montage Tag 的事件,通知 GAS 系统攻击已命中,触发打击感表现层反馈。

  5. 资源回填(攻击回蓝)

    基于 GE_Mana_Regen 创建 GE Spec 实例,利用 Assign Tag Set by Caller Magnitude 节点通过 SetByCaller.Mana 标签动态设定恢复数值(避免在 GE 中写死数值,允许根据不同连段灵活调整)。

  6. UI 更新

    调用 Show Mana UI,通知 UI 读取最新 Attribute 属性值,刷新 HUD 法力条。

OnHit 事件处理蓝图(Tag Check 标签筛选 + 伤害分发 + GAS 事件负载构建)

角色向自身发送 Event.Montage 标签后,ComboGraph 捕获该事件并执行对应逻辑:

  1. 激活 GE_Damage_Melee(GameplayEffect),其内部分别激活 GE_HitReaction_Melee 并修改 Health Attribute(数值为 Set by Caller,即 ComboGraph 中的 -5.0)
  2. 激活 GE_Cost_LightAttack,处理该段攻击的耐力值消耗

GE_HitReaction_Melee 通过给目标 Actor(受击者)增加 Event.Character.BeingHit.Melee Tag,激活对方的受击 GameplayAbility。

ComboGraph 节点的 Gameplay Effects 配置(GE_Damage_Melee + Set by Caller 动态伤害值)

GE_Damage_Melee Additional Effects 配置 — 内嵌激活 GE_HitReaction_Melee

GE_HitReaction_Melee Target Tags 配置 — Grant Event.Character.BeingHit.Melee 给受击 Actor

玩家角色收到 Event.Montage 信号后,同时执行 GameplayCues,实现玩家侧打击感表现:

GameplayCue效果
受击溅血特效命中点溅血 VFX
火花特效武器碰撞火花
击中点反馈特效Impact Point 视觉反馈
打中音效角色侧的命中声音反馈

玩家侧 GameplayCue 配置(Event.Montage 触发:溅血 Niagara 粒子 + 音效分层)

目标角色收到 Event.Character.BeingHit.Melee 信号后,执行 GA_HitReaction_Enemy_Melee(由指定 Tag 触发)。

目前 GA 中的打击感构成:

效果说明
相机震动Camera Shake
音效播放受击音效
慢镜头短暂时间膨胀
顿帧 (Hit Stop)帧冻结强化打击力度感
受击动画受击硬直/位移

GA_HitReaction_Enemy_Melee Tags 配置(Trigger Source: Event.Character.BeingHit.Melee)

GA_HitReaction_Enemy_Melee 蓝图(相机震动 + 音效 + 慢镜头 + 顿帧 + 受击动画完整流程)