看了看Unity的官方文档 简单学习下InputSystem怎么使用
新输入系统InputSystem是2019年Unity新推出的插件,输入系统包实现了一个系统来使用任何类型的输入设备来控制你的Unity内容。它旨在成为Unity的经典输入管理器(UnityEngine)更强大、更灵活、更可配置的替代品。 新输入系统基于事件,输入设备和动作逻辑互相分离,通过配置映射来处理输入信息。。
打开Unity项目,Window->Package Manager
安装之后会提示
要求是否禁用之前的InputManager 如果Yes 将启用新的InputSystem,Yes就OK了 如果希望两者都能使用(既能使用InputManager 也希望使用InputSystem)
both即可
两种使用InputSystem的方法
直接使用InputSystem的方法很简单,系统提供了各种设备对应的管理类和当前实例,
if (keyboard.wKey.wasPressedThisFrame)
{
Debug.Log("W键按下");
}
if (keyboard.sKey.wasReleasedThisFrame)
{
Debug.Log("S键松开");
}
if (keyboard.aKey.isPressed)
{
Debug.Log("A键按住");
}
Debug.Log("按住D键 : " + keyboard.dKey.isPressed);
Unity官方文档给的实例
var gamepad = Gamepad.current;
if (gamepad == null)
return; // No gamepad connected.
if (gamepad.rightTrigger.wasPressedThisFrame)
{
// 'Use' code here
}
Vector2 move = gamepad.leftStick.ReadValue();//获取左摇杆的输入返回一个v2类型的变量
// 'Move' code here
如果考虑多个同类型的输入设备,比如多个手柄或者多个键盘,那么应使用InputSystem.devices列表来获取所有可用设备并从中找到自己所需的那个。
新的InputSystem是基于 InputAction输入动作来驱动的系统。
首先创建一个Input Action Assets
Input Action Assets包含了输入动作及其关联的绑定和控制方案。 具有.inputactions文件扩展名,并以纯JSON格式存储。
打开后的界面 最好勾选Auto-Save 自动保存配置
Input Action Assets分成了三块: ActionMaps Actions Properties
而 Properties 是为Actions服务的
但首先了解一下什么是InputAction
输入动作(事件)指的是接收到的输入信号源的抽象化。
比如操作小球 按下空格让小球跳跃
按下空格键 让小球操作就是输入信号
而按下空格键所触发的动作(事件) 也就是小球跳跃 就是所谓的输入动作
也就是说 输入动作就是由于输入信号所触发的事件
图示中 Actions中存储着各种Input Action(输入动作)
而在Actions中可以为输入动作绑定不同设备的输入信号(大致了解下 之后会讲到)
比如说玩家的Move输入动作
可以通过不同的输入信号 比如鼠标左右键 键盘WASD键 而这些输入信号又可以来自于不同的输入设备 比如鼠标 键盘 通过InputSystem 各种输入设备可以无缝切换。
也就是说 输入设备绑定了各种输入信号 而输入信号触发了输入动作
动作表可以理解为一系列输入动作(Input Action)的集合
每个动作表底下都有自己的一套输入动作
可以同时拥有多个动作表 依据不同的情况进行来回切换
如图示
可以创建专门用于玩家移动的Action Map 再创建关于UI菜单的Action Map
这样 在玩家移动 激活Player动作表 在使用UI菜单 激活UIMenu动作表
这样 即使两个动作表之间有相同的输入信号(按键)也不会发生冲突。
也就是说 在不同情况下 使用同一按键 不会引发冲突
双击或f2对Input Action进行命名
1.在右边的Properties对输入动作选择类型(Action Type)
其中Value指代各种连续变化的输入,比如鼠标移动,摇杆偏移,手柄扳机等,但这个选项只会获取当前受控制的一个设备输入。
Button则表示按钮输入,无论是鼠标按钮或是手柄按钮,其输入结果为布尔型。
PassThrough和Value基本相同,但它可以获取所有可用输入设备的输入。
2.选择操作类型(Control Type)
这里举的例子是玩家的2D移动 因此选择值类型 选择的控制类型是二维向量
这样Move动作就可以读取x y 方向的数值
3.给当前动作绑定输入信号
要添加新的绑定,请选择要添加到其上的动作上的添加(+)图标,然后从出现的菜单中选择绑定类型。
这样就可以添加相同类型的绑定了
一般来说 我们平时用到的输入信号:
鼠标的移动 手柄的摇杆的移动等 都是具有向量性质的操作信号
可以直接绑定在Move动作中 因此使用Add Binding
对于键盘的操作信号 可以通过
通过监听键盘的输入 获得相应的绑定
这样就实现了对Input Action Asset的配置
配置成功后 可以选择添加PlayerInput组件进行配置 也可以直接通过C#脚本的形式进行配置 这里直接通过C#的形式对InputSystem简单进行操作
(其实还没用到 (・(ェ)・) )
public interface IGamePlayActions
{
void OnMove(InputAction.CallbackContext context);
}
这里的OnMove就是我们的移动输入函数
Struct InputAction.CallbackContext
这个结构体将作为动作逻辑被触发时事件的参数使用,内部含有关于本次触发情况的所有参数。