Unity有两套输入系统,旧的叫Input Manager,新的叫Input System。旧的在Project Settings-Input Manager里配置。
新的以PlayerInput组件和InputActions资源文件的方式使用。
Input System
有几个playerInput组件意味着有几个玩家。如果是单机游戏,场景里应该只有一个playerInput。
实现打开一个菜单时禁用人物的所有动作输入
定义两个ActionMap,打开菜单的Action定义在Player,关闭菜单的Action定义在UI。一般是同一个按键。
在打开菜单的回调方法里修改playerInput组件使用的ActionMap。通过字符串指定。
playerInput.SwitchCurrentActionMap("UI");
关闭菜单的回调方法里再修改playerInput组件使用的ActionMap。
playerInput.SwitchCurrentActionMap("PLayer");
输入管理框架设计
在多个游戏场景中经常需要一套相同的输入、管理器、相机、游戏界面等对象组成的整体,这些对象经常打成预制体。众所周知,预制体里的字段不能指向外面的对象,为了在新场景使用时不用重新配PlayerInput的回调事件,需要把所有输入回调事件写在自己的输入管理脚本里,对其他对象的操作在输入脚本里封装一下,再使用单例调用其他对象。
就是这一列的对象不要有预制体之外的: