Unity3D关于InputSystem的简单使用(一)

看了看Unity的官方文档 简单学习下InputSystem怎么使用

目录

  • 什么是InputSystem
  • 安装InputSystem
  • InputSystem的配置
    • 直接从输入设备获取输入
    • 通过输入操作间接获取输入
      • 什么是输入动作(InputAction)
      • 什么是动作表(Action Map)
      • 如何配置Input Action Asset
        • 1.添加Action Map
        • 2.配置Actions
        • 对Input Action进行输入信号的绑定
    • 通过C#的形式对InputSystem简单进行操作

什么是InputSystem

新输入系统InputSystem是2019年Unity新推出的插件,输入系统包实现了一个系统来使用任何类型的输入设备来控制你的Unity内容。它旨在成为Unity的经典输入管理器(UnityEngine)更强大、更灵活、更可配置的替代品。 新输入系统基于事件,输入设备和动作逻辑互相分离,通过配置映射来处理输入信息。。

安装InputSystem

打开Unity项目,Window->Package Manager
Unity3D关于InputSystem的简单使用(一)_第1张图片
安装之后会提示
Unity3D关于InputSystem的简单使用(一)_第2张图片
要求是否禁用之前的InputManager 如果Yes 将启用新的InputSystem,Yes就OK了 如果希望两者都能使用(既能使用InputManager 也希望使用InputSystem)
Unity3D关于InputSystem的简单使用(一)_第3张图片
both即可

InputSystem的配置

两种使用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
Unity3D关于InputSystem的简单使用(一)_第4张图片
Input Action Assets包含了输入动作及其关联的绑定和控制方案。 具有.inputactions文件扩展名,并以纯JSON格式存储。

打开后的界面 最好勾选Auto-Save 自动保存配置
Unity3D关于InputSystem的简单使用(一)_第5张图片
Input Action Assets分成了三块: ActionMaps Actions Properties

而 Properties 是为Actions服务的

但首先了解一下什么是InputAction

什么是输入动作(InputAction)

输入动作(事件)指的是接收到的输入信号源的抽象化。

比如操作小球 按下空格让小球跳跃
按下空格键 让小球操作就是输入信号
而按下空格键所触发的动作(事件) 也就是小球跳跃 就是所谓的输入动作Unity3D关于InputSystem的简单使用(一)_第6张图片
也就是说 输入动作就是由于输入信号所触发的事件

图示中 Actions中存储着各种Input Action(输入动作)
Unity3D关于InputSystem的简单使用(一)_第7张图片

而在Actions中可以为输入动作绑定不同设备的输入信号(大致了解下 之后会讲到)

比如说玩家的Move输入动作
Unity3D关于InputSystem的简单使用(一)_第8张图片
可以通过不同的输入信号 比如鼠标左右键 键盘WASD键 而这些输入信号又可以来自于不同的输入设备 比如鼠标 键盘 通过InputSystem 各种输入设备可以无缝切换。

也就是说 输入设备绑定了各种输入信号 而输入信号触发了输入动作

什么是动作表(Action Map)

动作表可以理解为一系列输入动作(Input Action)的集合
每个动作表底下都有自己的一套输入动作
可以同时拥有多个动作表 依据不同的情况进行来回切换
如图示
Unity3D关于InputSystem的简单使用(一)_第9张图片
可以创建专门用于玩家移动的Action Map 再创建关于UI菜单的Action Map
在这里插入图片描述
这样 在玩家移动 激活Player动作表 在使用UI菜单 激活UIMenu动作表
这样 即使两个动作表之间有相同的输入信号(按键)也不会发生冲突。

也就是说 在不同情况下 使用同一按键 不会引发冲突

如何配置Input Action Asset

1.添加Action Map

点击加号 添加ActionMap
Unity3D关于InputSystem的简单使用(一)_第10张图片

2.配置Actions

双击或f2对Input Action进行命名

在这里插入图片描述

对Input Action进行输入信号的绑定

1.在右边的Properties对输入动作选择类型(Action Type)

其中Value指代各种连续变化的输入,比如鼠标移动,摇杆偏移,手柄扳机等,但这个选项只会获取当前受控制的一个设备输入。

Button则表示按钮输入,无论是鼠标按钮或是手柄按钮,其输入结果为布尔型。

PassThrough和Value基本相同,但它可以获取所有可用输入设备的输入。
Unity3D关于InputSystem的简单使用(一)_第11张图片
2.选择操作类型(Control Type)
Unity3D关于InputSystem的简单使用(一)_第12张图片
这里举的例子是玩家的2D移动 因此选择值类型 选择的控制类型是二维向量

这样Move动作就可以读取x y 方向的数值

3.给当前动作绑定输入信号

要添加新的绑定,请选择要添加到其上的动作上的添加(+)图标,然后从出现的菜单中选择绑定类型。
Unity3D关于InputSystem的简单使用(一)_第13张图片

这样就可以添加相同类型的绑定了

Unity3D关于InputSystem的简单使用(一)_第14张图片
在path中 可以通过Listen和查找的方式绑定输入信号

一般来说 我们平时用到的输入信号:
鼠标的移动 手柄的摇杆的移动等 都是具有向量性质的操作信号
可以直接绑定在Move动作中 因此使用Add Binding

对于键盘的操作信号 可以通过
Unity3D关于InputSystem的简单使用(一)_第15张图片
通过监听键盘的输入 获得相应的绑定
Unity3D关于InputSystem的简单使用(一)_第16张图片
这样就实现了对Input Action Asset的配置
Unity3D关于InputSystem的简单使用(一)_第17张图片

配置成功后 可以选择添加PlayerInput组件进行配置 也可以直接通过C#脚本的形式进行配置 这里直接通过C#的形式对InputSystem简单进行操作
(其实还没用到 (・(ェ)・) )

通过C#的形式对InputSystem简单进行操作

  1. 保存好配置表后 在Inspector栏中勾选Generate C# Class
  2. Unity3D关于InputSystem的简单使用(一)_第18张图片
  3. 直接Apply即可(也可以在这里配置路径,类名和命名空间)
    Unity3D关于InputSystem的简单使用(一)_第19张图片
    这里就是我们生成的脚本文件 这里重点看最后一个函数即可
    在这里插入图片描述
   public interface IGamePlayActions
    {
        void OnMove(InputAction.CallbackContext context);
    }

这里的OnMove就是我们的移动输入函数

Struct InputAction.CallbackContext

这个结构体将作为动作逻辑被触发时事件的参数使用,内部含有关于本次触发情况的所有参数。

你可能感兴趣的:(Input,System,unity3d)