基于 Unity Input System 封装的一套轻量级输入管理工具,通过 ScriptableObject 配置驱动,实现输入资产与业务逻辑解耦
var move = actions.FindAction("Player/Move");
var jump = actions.FindAction("Player/Jump");这样会有几个麻烦:
- 路径字符串散落一地,容易写错
- 后面改 Map/Action 名字,很多地方都要跟着改
- 每个脚本都直接依赖 .inputactions 资产,耦合比较重
在不同的项目中,通过换不同的InputActionAsset和路径来快速配置
提供启动时按配置启动某些Map,例如:打开菜单时只启用UI Map
- Move
- Look
外部脚本直接读属性
- JumpPerformed
- InteractPerformed
外部脚本订阅事件
- 将包拖入Unity中。
- 在包管理器中安装InputSystem
- 在Project Settings-Player-Active Input Handing中改为Input System Package或者Both
- 在Input Actions中新建一个Actions(建议),或者在Project窗口中右键新建一个Actions
- 把这个Actions拖入Input Config中,并填写相应内容
- 场景里放一个InputService对象并挂载
- 调用,例:
//角色移动
Vector2 move=InputService.Instance.Move;
//跳跃
private void OnEnable()
{
InputService.Instance.JumpPerformed += OnJump;
}
private void OnDisable()
{
if (InputService.Instance != null)
InputService.Instance.JumpPerformed -= OnJump;
}
private void OnJump()
{
// 跳跃逻辑
}
//打开菜单时切换输入
InputService.Instance.SwitchToOnlyMap("UI");
//关闭菜单时切回
InputService.Instance.SwitchToOnlyMap("Gameplay");