事件驱动的 GA:GameplayEvent

蒙太奇播放到"第 23 帧该出伤害了"——这个时机由谁告诉 GA?答案是 GameplayEvent。

_ANIM NOTIFY 与 GameplayEvent 的衔接

动画蒙太奇里可以放 AnimNotifyState_PlayGameplayEvent(或 C++ 里 PlayGameplayEvent),参数填一个事件标签:

蒙太奇 A_Cast
  └─ Notify "CastHit"(事件标签 Event.Skill.CastHit)

GA 蓝图:

WaitGameplayEvent(Event.Skill.CastHit)
   → 生效分支(Commit + Apply GE)

美术改帧、程序改逻辑,两者解耦——这正是第 1 本里"Anim Notify 对接"的 GAS 版。

GameplayEvent 的完整数据

一个 GameplayEvent 不只有标签,还带:

字段 内容
EventTag 事件标签
Instigator / Target 触发者与目标
OptionalObject 附加对象
InstigatorTags 触发者携带标签

GA 里 "Send GameplayEvent" 节点也可以手动发送——这样 GA 之间、蓝图与 GA 之间也能用事件通信。

与 TargetData 结合:命中谁

近战攻击的命中:武器碰撞 → 发送 GameplayEvent(Event.Skill.Hit,Target = 命中 Actor)→ GA 收到 → 对 Target 应用伤害 GE。这一套把"检测命中"与"结算伤害"分得很干净:

  • 武器蓝图只管"告诉框架我碰到了谁";
  • GA 只管"对目标做规则结算"。

常见坑:事件标签的登记

GameplayEvent 用的事件标签同样是 GameplayTag,务必在 ini 登记(第 2 章规范):根命名空间建议用 Event.*:

Event.Skill.CastHit
Event.Skill.Hit
Event.Interaction.Pickup
Event.Death

不登记的后果:打错字母(CastHIt)编译时无任何提示,运行时"技能死活不生效"。

本章小结

  • GameplayEvent 由蒙太奇 Notify / 蓝图发送,GA 用 WaitGameplayEvent 接收。
  • 美术控制帧时机、程序控制结算逻辑,两者解耦。
  • Weapon → GameplayEvent → GA → GE 的链路是 GAS 近战命中标准做法。