一些概念
- Action Maps
一组Action的集合为一个Action Map。可以同时有多个Action Map,可以进行切换,也可以同时运行(监控)。例如可以使用joystick控制角色移动,也可以使用joystick控制菜单。通过切换Action Map,使得显示菜单时使用joystick不会移动角色。 - Actions
游戏输入事件,如Movment,Attack等。可以自由定义。每个Action会对应1或多个Binding或Binding的组合。比如Movment Action,可以绑定到Left Stick,也可绑定到WASD的组合。 - scheme
可以选择Binding所属的输入模式(scheme),scheme可以让一个player只使用一组binding,默认也可以自动切换。如果不勾选模式,则属于任意模式(即在任意模式下都存在)。Player Input组件中可以选择初始的模式,如果选择,则任意一个模式下的binding被触发时该模式被激活。Player Input组件还可以设置模式Auto Switch,这样当有多个模式存在时(比如同时连接了多个控制器),会根据当前有输入产生的控制器,来选择模式。模式的一个作用是,当本地多人游戏时,可以给每个玩家分配一个模式,比如每人一个手柄,这样他们的输入可以准确的控制相应的玩家角色而不互相干扰。
无论如何,scheme提供了一个控制一组按键Binding的层次,可根据需求使用。
Player Input组件
使用这个组件可以快速开发,只要设定所使用的InputActionAsset,并且绑定事件代码即可。
Behavior推荐使用Invoke Unity Events,效率比较高,最好不要使用Send Messages。
处理设备断开重连
主要是两个事件,Device Lost / Device Regained
设备切换(Scheme switch)
Controls Changed事件。如果选择了Auto-Swtich,则会自动切换当前的Scheme。然后可以在这个事件里面获取当前的Scheme,然后做一些有用的操作。比如根据当前的设备显示按键提示。
Debug信息
在Editor模式运行时,会显示当前的User(从0开始),Control Scheme和Devices,比较方便观察设备切换。
On Screen Control
使用On Screen Control通过UI去模拟输入Action, 给UI配置一个control path。
已知问题:当屏幕上有多个on screen control时,将某一个control deactive会导致其他control状态混乱。可能和deactive control时的输入设备管理有关系。临时解决方法:不要deactive on screen control game object,可以将其image组件disable。
参考资料
- 官方例子工程