输入系统
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/input-systems-sh-nkvt6m
技能介绍
为什么需要输入抽象层
如果直接在游戏逻辑里写 if (Input.IsKeyDown(KeyCode.Space)) Jump(),问题会在项目变大时集中爆发:玩家想改键?你得在散落各处的按键判断里逐一替换;要支持手柄和触屏?每个操作都要再写一套映射;想做无障碍重映射?几乎等于重写输入系统。罪魁祸首就是缺少一层间接——游戏玩法本应关心"跳跃是否被按下",而不是"空格是否被按下"。
核心能力
这个技能定义了一个引擎无关的输入架构,核心是把物理输入(键盘、手柄、触摸)映射到命名动作(jump、interact、move)。游戏玩法只读取动作,绑定关系作为数据存在,因此重绑定、多设备切换、无障碍调整都变成配置变更,而非代码改动。
关键步骤包括:
- 定义动作而非按键:动作是稳定的契约,绑定是可替换的数据。
- 按设备绑定:每个动作分别持有键盘、手柄、触摸的绑定;活动设备由最后一次输入决定,提示文字随之切换。
- 区分边沿与保持:离散动作(跳跃、交互)用
pressed-this-frame边沿检测,连续动作(移动、瞄准)用held电平检测,混淆两者会导致重复触发或漏判。 - 模拟输入过滤:对摇杆和扳机应用死区和灵敏度曲线,消除静止漂移。
- 手感缓冲:输入缓冲让略早的按键仍然生效;郊狼时间允许离开边缘后短时间内跳跃,让平台跳跃更宽容。
- 重绑定成为一等公民:捕获下一个输入、检测冲突、保存绑定,并提供恢复默认。
适用边界
这个技能是架构指南,不包含引擎的具体 API。Unity 需要配合 Input System,Unreal 需要 Enhanced Input,Godot 使用 InputMap。它也不负责按键绑定的持久化(那是 save-systems 的工作),更不涉及缓冲所喂养的移动物理(见 physics-tuning)。当你需要的是某个引擎的输入包时,请转向对应的具体技能。
使用场景
- 平台跳跃游戏玩家抱怨跳跃生硬,需要在物理判定前加入输入缓冲与郊狼时间窗口
- 手柄玩家反馈界面仍显示“按空格跳跃”,需要按最后活动设备切换按键提示图标
- 发售前做无障碍审查:为无法同时按键的玩家提供全量重映射与开关替代方案
- 计划开放玩家自定义键位,需要实现冲突检测、保存与恢复默认的重绑定界面
适合人员
- 独立游戏开发者:同时在 Unity 和 Godot 出原型,想让输入架构两边通用
- 游戏无障碍顾问:审查控制方案是否存在强制同按、不可重映射等障碍
- 手感调参工程师:负责平台跳跃物理,需要输入缓冲窗口与之精确配合
- 项目技术负责人:清理玩法代码里散落的硬编码按键,统一收敛到命名动作层