一、前期准备
1、安装
InputSystem作为Unity的新版输入系统,不同于默认的输入系统。InputSystem需要我们Package Manager中进行安装,并进行一定量的配置,才能在代码中进行调用。
2、概念介绍
对于Unity默认输入系统,直接GetKeyDown就能获取按键事件。而对于大型项目的复杂需求,这种方式就显得有点力不从心。至少也需要一位中高级工程师,进行一定程度的封装,才能应对项目需求。
而InputSystem就是在这一需求背景下,产生的。InputSystem的使用,虽然没有默认输入系统那样,直接上手写代码来的直观。但是其本身操作流程也很简单,总共只分两步。第一步,配置InputActions。第二步,生成代码,添加委托响应函数。
对于简单的配置和代码编写工作,可以参考上面的文章链接。后续文章,会针对“配置”和“代码”这两步操作当中的细节,进行更仔细的介绍。在此之前,我们要先了解一下InputSystem的总体结构:
InputSystem的配置表,分为3层结构分别是:Binding、Actions、Action Map。
Action Map:动作表。包含多了多个动作的一组动作表。比如建立两张表分别是GamePlay表和UI表。GamePlay表就可以包含移动、攻击、跳跃等。UI表就可以包含打开背包、打开属性面板、打开技能栏等。
Action:动作:一个具体的动作行为。也可以更直观的理解为一个事件、一个要执行的函数。在代码中,大部分情况下我们要完成某个行为,操作Action即可实现。
Binding:按键:可以是键盘、鼠标、手柄等任意设备的按键。每个按键都会触发对应的Action。同时,每个按键也可以同时触发多个不同Action,被触发的Action可以在不同的Action Map中。
二、实现动作表Action Map的切换
在实际项目的开发过程中,我们经常会遇到按键冲突的情况。
比如RPG游戏中,角色行走时,我们用wasd进行移动。而在菜单选择的时候,有时我们也会用w键和s键进行菜单的上下选择切换;FPS游戏中,鼠标左键通常代表射击,而很多情况下,鼠标左键又需要和UI的点击事件进行交互。
这种时候我们就可以利用Action Map的动作表切换功能,来解决按键冲突的问题。
首先假设我们有这样一张InputAction的配置表,该表命名为GameInput。其中,分别包含了GamePlay、Dialogues、Menu三个动作表:
GamePlay动作表,包含了Move动作,绑定了WASD四个按键。用来表示项目中的角色移动;OpenMenu动作,绑定了Esc键,是用来打开Menu菜单的。
Dialogues动作表,包含了Skip动作,绑定了键盘任意键。用来表示项目中对话动作,我们按任意键,都可以跳过当前对话。
Menu动作表,包含MoveUp和MoveDown动作,分别绑定了W键和S键;ReturnToGame动作,绑定了Esc键,是用了关闭Menu返回游戏界面的。
我们可以明显看到,当按下W和S键时,GamePlay、Dialogues和Menu都会触发动作响应。如果按下Esc键,那么GamePlay和Menu中也都会有动作响应。这不是我们想要看到的结果,我们需要把不同情况分开处理。
此时,就需要用到动作表的Enable和Disable接口。
上图中的代码,就演示了不同的调用方式。GameInput是输入配置表生成代码的类名,new之后,就可以对gameInput、动作表、动作调用Enable和Disable接口。
gameInput默认是不可用状态,代码第14行调用gamePlay.Enable()可以让所有的动作表都进入响应状态。
代码16行,将Dislogues动作表设置为不可用状态。
代码18行,将GamePlay的Move事件设置为了不可用状态。
实践中不同动作、动作表的可用状态,就需要读者们根据需求自行调整了。而要添加每个动作的响应事件,这里利用到了内置的performed委托:
第14行,表示默认只开启GamePlay的事件响应。
第17-20行,就是利用performed委托,打印了不同的日志输出。
第23-28行,给OpenMenu添加了回调事件响应。同时,在26行和27行,将动作表切换到了Menu。
第29-34行,给ReturnToGame添加了回调事件响应。同时,在32行和33行,将动作表切换到了GamePlay。
到此,我们就简单的实现了动作表切换的功能,解决了按键冲突的问题。
思路上,就是在GamePlay动作表的OpenMenu动作中,绑定了委托事件实现切换;在Menu动作表的ReturnToGame动作中,绑定了委托切换到GamePlay表。并且OpenMenu和ReturnToGame都绑定的是Esc键,因此可以用Esc键在两个动作表之间方便的切换。
掌握了动作表之间的切换功能,就可以自由实现其它类似功能。比如FPS游戏中,角色和载具之间的切换;角色控制和聊天打字之间的切换等等。
·END·
扫描二维码
⬇️
添加助教老师
⬇️
免费领取游戏策划4天训练营!
⬇️