事件驱动的 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 近战命中标准做法。
