旧输入系统的三个痛点

痛点一:硬编码的项目设置

旧系统(UE4 时代沿用至今)的按键绑定写在 Project Settings → Input 的一个全局表里,本质是硬编码在项目配置中:

  • 加一个新动作 = 改项目设置(全局影响所有代码、所有人 merged 时都受影响);
  • 详细参数(按住时长、连按间隔、死区)写在蓝图节点的属性里,改手感要打开蓝图找节点;
  • 数据无法驱动:按键映射不是资产,程序读不了、策划批量改不了、存档自定义按键要自己造一套。

举个例子:旧系统里"按住 0.5 秒算蓄力"怎么做?蓝图里拿一根轴值、开 Retriggerable Timer、计时、超时分支——三四十个节点。而这些"手感逻辑"分散在几十张蓝图里,改一次全量回归。

痛点二:上下文全靠手动管理

"主角在走路、在开车、在 UI 里"三种状态对应完全不同的按键含义。旧系统里要自己写"开关 Action 映射"的代码(EnableInput/DisableInput 或自己维护标记),状态一多就到处是开关,漏一个就串键。

典型串键场景:玩家死亡进入观战界面,某个开关漏了,观战者按"移动键"仍然驱动已经死掉的角色——物理上无害(禁了碰撞),但角色在镜头里抽搐挪动。这类 bug 不会让游戏崩溃,但会被玩家截图做成表情包。

痛点三:手柄适配别扭

旧系统的轴映射(Axis Mapping)对"摇杆推动量"做处理十分笨拙: - 死区要自己写(摇杆松开时的零漂会让角色"自己走"); - 响应曲线要自己写("轻推走、重推跑"的手感曲线); - 不同设备(Xbox/PS/Nintendo/Switch 手柄混用)的按键名差异要自己维护层 if (Device == ...)。

Enhanced Input 的三味解药

旧痛点 Enhanced Input 的解法
硬编码 IA/IMC 是资产:可引用、可批量改、可序列化做玩家自定义
上下文管理 IMC 是一等公民:AddMappingContext / RemoveMappingContext 一行代码,支持优先级
手柄适配 内置死区、曲线、设备映射、Trigger(按住/双击/脉冲)

本章小结

  • 旧输入三痛点:硬编码项目设置、上下文全靠手动开关、手柄适配笨拙。
  • Enhanced Input 把"按键映射"变成资产、把"上下文"变成一等公民、把手柄处理变成内置功能。