Agent Skills
返回列表
💻

Unity 新版输入系统

开发编程 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/unity-input-system-sh-0uylgu 到我的 AI 助手中。

技能介绍

这个技能解决什么问题

Unity 的旧版 Input.GetAxis / Input.GetKey 走的是 Input Manager 这套老后端,它有几个让人头疼的地方:手柄和键盘是两套独立的绑定逻辑,换设备就得改代码;重新绑定按键要在脚本里手写状态机;项目从键鼠扩展到手柄时,不少处理代码得推倒重来。

Unity Input System(com.unity.inputsystem,1.x)用 基于 Action 的输入模型替代了这套机制,把「哪个设备」和「做什么动作」解耦。这个技能就是围绕这套模型展开的,面向 Unity 6。

技能的核心能力

从 .inputactions 资产读取输入。 在资产里定义 action map(比如 Gameplay),往里添加动作——Move 是 Value/Vector2,Jump 和 Fire 是 Button——然后绑定到具体控制项或 composite binding(比如把 WASD 配成一个 2D Vector 复合绑定)。

两种读取方式,按场景选。

  • PlayerInput 组件:拖到玩家物体上,指向 .inputactions 资产,选一种 Behavior(Send Messages、Broadcast、Invoke Unity Events 或 Invoke C# Events)。适合单人或本地合作这类简单场景。
  • 代码直接读取:用 InputActionReference / InputActionAsset,自己调用 .Enable() 再读取。适合系统级和工具类代码,控制粒度最细。

核心工作流。

  1. 先检查 Project Settings → Player 里的 Active Input Handling,确认是 Input System Package (New) 或 Both。只要还有旧的 Input.GetAxis 代码,就得设成 Both。
  2. 创建 .inputactions 资产,配好 action map、动作和绑定。
  3. 选定读取方式(PlayerInput 组件或代码直读)。
  4. 手动引用的 action / map 要自己 .Enable(),PlayerInput 会自动启用它自己的默认 map,销毁时记得 disable。
  5. 切换 action map 来应对不同上下文(游戏内 ↔ UI/菜单),别在每个 handler 里加 guard。
  6. 用 Input Debugger(Window → Analysis → Input Debugger)确认设备和 action 触发情况。

常见坑

  • 完全没输入:要么 Active Input Handling 还停在 Input Manager (Old),要么忘了对手动引用的 action / map 调用 .Enable()。PlayerInput 会自动启用,裸用的 InputAction 不会。
  • 抛出关于旧输入后端的 InvalidOperationException:说明还有脚本在调 Input.GetAxis / Input.GetKey,而 Active Input Handling 已是 New。要么把这些代码迁移过去,要么暂时设成 Both。
  • 按钮用 ReadValue 读出 0:按钮按下是 edge event,要用 performed 回调或 WasPressedThisFrame(),别在每帧 ReadValue 里判断触发。
  • Send Messages handler 不触发:接收脚本必须和 PlayerInput 在同一个 GameObject 上;用 Broadcast 才能触达子物体。
  • 订阅泄漏:在 OnDisable 里用 -= 取消订阅,否则 OnEnable 里反复 += 会让 handler 重复叠加。
  • 触屏/手柄检测不到:确认启用了对应的 control scheme,在 Input Debugger 里核对设备;Vector2 composite 需要四个绑定都设全。

适用边界

需要跨引擎的可重新绑定输入架构时,这个技能不适用——那种场景走 input-systems,本技能只负责 Unity 这一层的 API。拿到输入向量之后的移动逻辑,归 unity-physics 和 unity-csharp-scripting 处理。

至于交互式重新绑定(PerformInteractiveRebinding)、把绑定存成 JSON,以及用 PlayerInputManager 做本地多人,SKILL.md 只给了入口:翻 references/rebinding.md。

使用场景

  • 在 Unity 6 项目里做角色移动、跳跃和开火,需要用 .inputactions 定义动作映射并读取 Vector2/Button。
  • 需要让同一套动作同时支持手柄、键盘和触屏,并通过 control scheme 切换设备输入。
  • 在玩家物体上挂 PlayerInput,用 Send Messages/Broadcast 把输入事件分发到游戏脚本。
  • 排查旧 Input.GetAxis 与新输入后端冲突,或按钮、订阅、手柄检测异常。

适合人员

  • Unity 客户端工程师:负责把旧 Input Manager 迁移到 Input System,并统一输入绑定。
  • 玩法程序员:实现移动、跳跃、开火和 UI 上下文切换,需要处理 action map 与事件回调。
  • 技术美术或工具开发者:制作 .inputactions 模板,处理输入调试和本地多人输入流程。