目录

Unreal - 传统输入 与 增强输入

传统输入

想象一下你在做一个《GTA》类的游戏。

“上车”后的逻辑地狱

在传统输入里,你定义了一个“空格键”叫 Jump。

  • 步行时:按空格是跳跃。
  • 开车时:你想让空格变成手刹。
  • 潜水时:你想让空格变成向上浮。

结果: 你的角色代码里会充斥着这种“逻辑毛线团”:

如果 (在车里) { 执行手刹 }

否则如果 (在水里) { w执行上浮 }

否则 { 执行跳跃 }

这就像老式街机,如果你想把“发射”键改成“确认”键,你得拿烙铁去后台重新接线。线越多,你就越容易把自己绕晕。

增强输入

增强输入把“按键”和“动作”彻底分开了。

  1. Input Action (IA) —— “功能按钮”

    Input Action* 就是技能表里的“轻攻击”、“交互”、“翻滚”。*

    它不关心你是按了鼠标左键还是手柄的 R1,它只代表一个动作意图

    • 例子:你定义一个 IA_Attack。
    • 好处:无论玩家是在用键盘、PS5 手柄还是方向盘开黑,你的 C++ 代码里只需要监听 IA_Attack 触发了没,而不需要去管玩家到底按了哪个键。
  2. Input Mapping Context (IMC) —— “技能卡带”

    同一个“空格键”,在不同模式下的功能完全不同:

    1. 步行模式:空格键 = 跳跃 (IA_Jump)
    2. 驾驶模式:空格键 = 手刹 (IA_Handbrake)
    3. 跳伞模式:空格键 = 开伞 (IA_OpenParachute)

    怎么玩?

    • 当玩家拉开车门那一刻,你只需要代码里一行 Add Mapping Context (驾驶模式)。
    • 神奇的事发生了:系统会自动把“步行模式”的按键屏蔽掉,同样的物理空格键,现在输出的指令自动变成了“手刹”。

    这就是增强输入的魅力: 你再也不用在代码里写 if (是在车里) { 手刹 } else { 跳跃 } 这种又臭又长的代码了。

总结

特性 传统输入 (Legacy) 增强输入 (Enhanced)
逻辑存储 项目配置文件(全局唯一) 独立的 UAsset(可复用、可动态加载)
状态切换 靠大量的布尔判断(Boolean Overload) 靠 Context 的叠加与移除(Layering)
数据处理 在 Tick 或事件中手动计算数学逻辑 资产内置 Modifiers(死区、缩放、反转)
手感调节 需要改动功能代码 在资产配置中调整 Triggers 参数