2.2 Enhanced Input 接入:Tag 驱动的输入系统
核心结论
旧版 Input(Input Axis/Action 映射)的核心问题是"字符串耦合":所有系统都要认识 "Attack" 这个字符串。Enhanced Input 用 Input Action(IA)资产 + Input Mapping Context(IMC)资产 + 输入 Tag 彻底解耦——战斗系统只认 Tag,不认识 IMC。这是分层架构(0102)在输入层的落地。
三件资产
| 资产 | 作用 | 我的组织方式 |
|---|---|---|
IA_Attack(Input Action) |
一个抽象动作("攻击",不管哪个键) | 每个玩法动作一个 |
IMC_Default(Mapping Context) |
按键 -> IA 的映射 | 按情境分(默认/战斗中/菜单中/驾驶中) |
| 输入 Tag(Gameplay Tag) | IA 对应的 Tag(Input.Attack) |
GA 的 Trigger 直接配 Tag |
流程:IA 被触发 -> 角色 ASC 上的 AbilitySystemComponent 直接按 Tag 找到对应 GA 激活。没有一行"if 按键 == X"的代码。
按角色阶段切换 IMC
| 状态 | 激活的 IMC | 说明 |
|---|---|---|
| 战斗中 | IMC_Default |
移动/攻击/技能 |
| 菜单中 | IMC_Menu |
上下左右/确认/取消 |
| 骑乘/载具 | IMC_Vehicle |
开车 |
| 死亡观战 | IMC_Spectator |
切镜头 |
切换时机用事件驱动:UI 打开/关闭、角色死亡复活。所有"我的输入没反应了"的 bug,90% 是 IMC 没切对。
落地步骤(蓝图)
- 角色蓝图里挂
InputComponent(默认有)+ Enhanced Input 的 MappingContext 接口。 PC的BeginPlay里Add Mapping Context:IMC_Default,优先级 0。- IA 资产配好 Trigger(Pressed/Held/Released)与 Value Type。
- 角色
EnhancedInputAction蓝图事件(或 C++ 的SetupInputComponent)监听 IA。 - 监听函数里:只做一件事——
TryActivateAbilityByTag(InputTag)。
常见坑与解法
坑 1:按键反应"延迟半拍"
原因:IA 的 Trigger 设成 Held 或用了不合适的 Value Type。
解法:点按类动作用 Pressed;长按蓄力用 Held + Trigger Time;别用 Tick 轮询按键。
坑 2:菜单里还能控制角色
原因:菜单只切了 Widget 没切 IMC。
解法:开菜单同时 Add IMC_Menu(高优先级),关菜单 Remove。UI 与输入是两件事,但常常是同一个开关。
坑 3:手柄/键盘键位冲突
原因:IMC 里同一个键映到两个 IA。
解法:官方输入文档(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/enhanced-input-in-unreal-engin-c7d0)的映射优先级说明;每个 IMC 内一键一动作,跨 IMC 复用靠切换。
坑 4:键位重绑定(玩家自定义键位)怎么做
解法:Enhanced Input 原生支持运行时改映射(AddPlayerMappedKey/Rebind)。把玩家的键位存设置文件(0102 存档分层里的"玩家偏好")。Lyra 的输入设置(https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/lyra-input-settings-in-unreal-2e04)有完整实现可参考。
相关节点速查
- 官方 Enhanced Input 指南:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/enhanced-input-in-unreal-engin-c7d0
- Lyra 输入:https://www.wanxiangyundang.top/read/unreal-engine-5-8-docs/lyra-input-settings-in-unreal-2e04
- Tag 驱动技能:GA 的 Trigger 配 Gameplay Tag
心得:换成 Tag 驱动输入后,加新技能时输入层完全不用改——新建 GA 配好 Tag 就能用。这种感觉就像系统之间突然会"自动对账"了。Enhanced Input 是 UE5 架构进步的缩影:从字符串走向资产与 Tag。
