Unreal - 传统输入 与 增强输入
目录
传统输入
想象一下你在做一个《GTA》类的游戏。
“上车”后的逻辑地狱
在传统输入里,你定义了一个“空格键”叫 Jump。
- 步行时:按空格是跳跃。
- 开车时:你想让空格变成手刹。
- 潜水时:你想让空格变成向上浮。
结果: 你的角色代码里会充斥着这种“逻辑毛线团”:
如果 (在车里) { 执行手刹 }
否则如果 (在水里) { w执行上浮 }
否则 { 执行跳跃 }
这就像老式街机,如果你想把“发射”键改成“确认”键,你得拿烙铁去后台重新接线。线越多,你就越容易把自己绕晕。
增强输入
增强输入把“按键”和“动作”彻底分开了。
-
Input Action (IA) —— “功能按钮”
Input Action* 就是技能表里的“轻攻击”、“交互”、“翻滚”。*
它不关心你是按了鼠标左键还是手柄的 R1,它只代表一个动作意图。
- 例子:你定义一个 IA_Attack。
- 好处:无论玩家是在用键盘、PS5 手柄还是方向盘开黑,你的 C++ 代码里只需要监听 IA_Attack 触发了没,而不需要去管玩家到底按了哪个键。
-
Input Mapping Context (IMC) —— “技能卡带”
同一个“空格键”,在不同模式下的功能完全不同:
- 步行模式:空格键 = 跳跃 (IA_Jump)
- 驾驶模式:空格键 = 手刹 (IA_Handbrake)
- 跳伞模式:空格键 = 开伞 (IA_OpenParachute)
怎么玩?
- 当玩家拉开车门那一刻,你只需要代码里一行 Add Mapping Context (驾驶模式)。
- 神奇的事发生了:系统会自动把“步行模式”的按键屏蔽掉,同样的物理空格键,现在输出的指令自动变成了“手刹”。
这就是增强输入的魅力: 你再也不用在代码里写 if (是在车里) { 手刹 } else { 跳跃 } 这种又臭又长的代码了。
总结
| 特性 | 传统输入 (Legacy) | 增强输入 (Enhanced) |
|---|---|---|
| 逻辑存储 | 项目配置文件(全局唯一) | 独立的 UAsset(可复用、可动态加载) |
| 状态切换 | 靠大量的布尔判断(Boolean Overload) | 靠 Context 的叠加与移除(Layering) |
| 数据处理 | 在 Tick 或事件中手动计算数学逻辑 | 资产内置 Modifiers(死区、缩放、反转) |
| 手感调节 | 需要改动功能代码 | 在资产配置中调整 Triggers 参数 |