第五十二章 Unity Input System 新输入系统

这篇具有很好参考价值的文章主要介绍了第五十二章 Unity Input System 新输入系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

新输入系统InputSystem是2019年Unity新推出的插件。请注意,Unity默认使用旧的Input Manager,新的Input System处于未启用状态。当你安装Input System组件时,Unity会询问你是否启用新的输入系统。如果你选择Yes,Unity会启用新的并禁用旧的,之后编辑器将重新启动。具体的操作是,打开包管理器(Windows -> Package Manager),在“Unity Registry”中找到 Input System插件,如下所示

第五十二章 Unity Input System 新输入系统

我们点击右下角的“Install”安装

第五十二章 Unity Input System 新输入系统

提示我们将使用新的输入系统,同时禁用旧的输入系统,我们点击“Yes”确认。

第五十二章 Unity Input System 新输入系统

我们当前工程中就已经存在新的输入系统了。为了能够确认我们的工程中使用的那种输入系统,我们可以在Edit -> Project Settings 窗口中的Player选项进一步来核实。

第五十二章 Unity Input System 新输入系统

 第五十二章 Unity Input System 新输入系统

我们看到在“Active Input Handing”一项中显示“Input System Package(New)”表示使用新的Input System输入系统。我们点击下拉还可以选择“Input Manager(Old)”或“Both”。很明显,“Input Manager(Old)”就是旧的Input Manager输入系统,而“Both”就是新旧输入系统都可以同时使用。

新的Input System有两种使用方式。第一种就是直接从输入设备获取输入;第二种就是基于 InputAction 输入动作来获取。我们重点介绍第二种 InputAction 输入动作。

首先,我们要理解如下概念:

InputAction:玩家的每一个输入都可以理解为是一个 InputAction(输入动作)。

InputActionMap:就是管理一些 InputAction 的一个集合(例如前后左右输入动作)。

InputController:就是管理具体硬件设备的输入(可以设置不同设备的按键)。

InputBinding:用于绑定 InputAction 和InputController(设备按键和输入动作关联)。

接下来,我们就来演示如何使用。

首先我们创建一个立方体Cube,然后为其添加一个 PlayerInput 组件。

第五十二章 Unity Input System 新输入系统

 第五十二章 Unity Input System 新输入系统

添加好组件后,如果我们要接受到输入,还需要创建InputAction。我们可以点击组件上的Create Actions按钮来创建。点击后会弹出一个对话框,来选择存放生成的.inputactions文件路径。

第五十二章 Unity Input System 新输入系统

我们可以定义这个.inputactions文件的名称,这里默认使用“NewInputProject”即可。保存路径就是Assets根目录下。这个文件其实就是一个配置文件(纯JSON格式存储),它包含了输入动作及其关联的绑定和控制方案。虽然它是一个文件,但是Unity提供了该文件的图形编辑界面。如下所示

第五十二章 Unity Input System 新输入系统

最左边是两个Action Maps,他们分别是Player和UI。他们是Unity为我们提前预制的Action Maps。我们点击“Player”就会在右边的“Actions”中显示该集合下面的InputAction。我们看到分别有三个:Move,Look,Fire。我们继续点开查看下级具体的InputAction。例如,我们点开Move这个InputAction,它的下面就是多个InputBinding。注意InputBinding的类型不一样的话,它的设置也不一样的。

第五十二章 Unity Input System 新输入系统

 第五十二章 Unity Input System 新输入系统

我们可以点击其中一个InputBinding,比如上图中的“WASD”。这个InputBinding根据名称我们大致理解,是用来控制上下左右四个方向的输入。因此它的下一级最少要设置四个方向(up,down,left,right)的输入配置。例如上图中的第一个输入设置“Up:W[Keyboard]”, 这个应该是键盘的字母W按键,对应的就是向上“Up”的输入信息。同时,我们可以在右边的“Binding Properties”中看到详细的配置。

Path 就是我们的设备按键。

Composite Part 应该是多个输入值的选项。

Use in control scheme 则是设备类型,他们的值含义如下

Keyboard&Mouse:键盘和鼠标

Gamepad:游戏手柄

Touch:触摸屏

Joystick:摇杆

XR:VR/AR设备

接下来,我们就手动添加一个自定义的“InputAction”

第五十二章 Unity Input System 新输入系统

我们点击“Actions”右边的加号,添加一个新的“InputAction”,命名为“Test”。接下来,我们来查看“Test”右边的“Action Properties”界面。该界面一共有三个配置项:Action,Interactions和Processors。我们重点介绍Action里面的内容。Action Tpye来定义我们“InputAction”的类型,它一共有三个值可以选择:Value,Button和Pass-Through。

第一,Value:主要用于状态连续更改的输入,例如鼠标的移动,游戏手柄的摇杆等等。如果有多个设备绑定这个Action,只会发送当前使用设备的输入。

第二,Button :用于每次按下时触发的Action,就是普通的按键而已。默认值。

第三,Pass-Through:和Value一样,区别在于如果有多个设备绑定这个Action,会发送所有设备的输入。

接下来,我们就可以给我们的“Test”添加“InputBinding”绑定,这个“InputBinding”可以添加多个的,也就是说一个“InputAction”可以添加多个“InputBinding”。这里,我们添加一个就行了。我们点击“Test”右边的加号,我们可以添加不同类型的InputBinding。

第五十二章 Unity Input System 新输入系统

我们稍微解释一下这个四个添加选项的含义:

Add Binding 普通的绑定,可以绑定一个按键,鼠标,游戏手柄等

Add Positive\NegativeBinding 两个按键的组合,一个代表正数,一个为负数

Add Button With One Modifier 需要同时按下两个按钮的组合,例如 ctrl + j

Add Button With Two Modifiers 需要同时按下三个按钮的组合,例如 shift + ctrl + j

其实我们发现在“Test”的下面就已经默认有一个<No Binding>了,它就是一个Add Binding普通的绑定,我们就直接使用它就可以了。请注意,这个“Test”和我们上面介绍的“WASD”是不一样的类型设置。我们点击选中它,然后查看右边的“Binding Properties”界面。

第五十二章 Unity Input System 新输入系统

我们选择“Keyboard”键盘

第五十二章 Unity Input System 新输入系统

我们选择“By Character Mapped to Key”

第五十二章 Unity Input System 新输入系统

我们随便选择一个“M”字母按键

第五十二章 Unity Input System 新输入系统

此时,Path处就会显示我们的“M”按键,我们在勾选“Keyboard&Mouse”一项即可完成“InputAction”的设置啦。接下来,我们回到“Player Input”组件中去。我们在该组件中找到“Behavior”行为一项,它的默认值是“Send Messages”,我们换成“Invoke Unity Events”。

第五十二章 Unity Input System 新输入系统

选择完毕后,就会下面出现“Events”项目,在该项目的下面会有“Player”和“UI”两个子项目。大家应该能够猜到,这两个就是我们刚刚在“NewInputProject.inputactions”配置文件中显示的“Action Maps”。我们可以点开“Player”查看它的子项目

第五十二章 Unity Input System 新输入系统

在最下面就会出现我们刚刚添加的“Test”的InputAction项目。接下来,我们需要创建一个脚本“TestScript.cs”文件,并且附加到Cube上面。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    public void OnTest()
    {
        Debug.Log("Input M");
    }
}

我们可以点击下面的加号添加上面的脚本,并将OnTest方法赋予我们的“Test” 的“InputAction”项目。如下所示

第五十二章 Unity Input System 新输入系统

添加完之后,我们就可以运行整个工程了。

然后按下键盘上面的“M”按键测试。

第五十二章 Unity Input System 新输入系统

总结:新的Input System在使用上与旧的Input Manager有很大的区别。旧的Input Manager虽然也是通过配置来设置很多的“虚拟轴”,然后在代码中获取“虚拟轴”来获取用户的输入,然后做进一步的处理。并且,这些代码都需要放置到Update方法中执行。而新的Input System系统也需要进行一些配置。显然,这些配置比旧系统更加复杂。新系统配置主要就是添加一个个的InputAction,每一个InputAction同可以绑定不同的输入设备上面的按键。这个InputAction非常类似旧系统中的“虚拟轴”。但是两者的区别在于,旧系统的设备输入是通过在代码中进行判断的;而新系统则是通过“Player Input”这个组件来获取,并指定脚本方法来执行的。从设计角度出发,旧系统只是对输入设备的封装,而新系统不仅是对输入设备的封装,还是对输入逻辑的封装。因此,新系统虽然复杂一下,但是去掉配置的内容之外(就是我们添加的inputactions文件,我们可以在这个文件中配置所有的输入情况),剩余的就是使用脚本方法来处理不同输入对应的游戏逻辑。新系统使得我们的代码书写结构更加清晰,每一个输入都对应一个脚本方法来处理,这个设计还是非常不错的。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id文章来源地址https://www.toymoban.com/news/detail-465264.html

到了这里,关于第五十二章 Unity Input System 新输入系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity New Input System 及其系统结构和源码浅析【Unity学习笔记·第十二】

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/132534422 作者:CSDN@|Ringleader| 主要参考: 官方文档:Unity官方Input System手册与API 官方测试用例:Unity-Technologies/InputSystem 如果c#的委托和事件不了解,参考我这篇:【C#学习笔记】委托与事件 (从观察者模式看C#的委

    2024年01月25日
    浏览(41)
  • Unity新(Input System)老(Input Manager)输入系统代码对比

    以下介绍都是基于Unity2022版本 一、键盘操作 当w键按下时 当w键抬起时 当w键按着时 二、鼠标操作 获取鼠标位置 获取鼠标滚轮 获取鼠标左键按下 获取鼠标右键抬起 获取鼠标中间按着

    2024年02月16日
    浏览(38)
  • 【Unity_Input System】Input System新输入系统(三)——在游戏中更换按键绑定

    Binding只由一个部分组成,一般绑定单个按键或者摇杆 CompositeBinding由两个以上部分组成,一般是用于将多个按键组成虚拟轴 更换按键绑定时,Binding和Composite Binding需要分别处理,对Composite Binding需要循环各个部分进行修改。 可以用InputBinding.isComposite来判断是否是Composite Bind

    2024年02月04日
    浏览(40)
  • 第五十章 Unity Input Manager 输入系统(上)

    Unity的输入系统支持多种输入设备,比如键盘和鼠标,游戏手柄,触摸屏,VR和AR控制器等等。Unity 通过两个独立的系统提供输入支持:第一,输入管理器 (Input Manager) 是 Unity 核心平台的一部分,默认情况下可用,属于旧的unity输入系统。第二,输入系统 (Input System) 是一个包,

    2024年02月10日
    浏览(34)
  • Unity VR:XR Interaction Toolkit 输入系统(Input System):获取手柄的输入

    输入系统是 VR 应用中非常重要的一部分。我们通常需要获取 VR 手柄上某个按键的输入,然后将其作用到应用中,比如按下手柄的 Grip 键进行抓取。在我的其他 Unity XR Interaction Toolkit 的开发教程里,已经有介绍如何去获取手柄的输入。那么这篇教程我将做一个总结,将相关的

    2024年02月12日
    浏览(34)
  • 第五十三章 Unity 移动平台输入(上)

    在移动设备上,Input 类提供对触摸屏、加速度计和地理/位置输入的访问。这里我们简单介绍Input类对于触摸屏的支持。Input.Touches是一个触摸数组,每个数组元素代表着手指在屏幕上的触碰状态Input.Touch。Input.Touch 数据结构表示: fingerId 触摸索引 deltatime 从最后状态到当前状态

    2024年02月03日
    浏览(28)
  • 【C++从0到王者】第五十二站:跳表

    skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。 skiplist,顾名思义,首先它是一个list。实际上,它是在有序链表的基础上发展起来的。如果是一个有序的链表,查找数据的时间复杂度

    2024年03月09日
    浏览(49)
  • 第三十二章 Unity Mecanim动画系统(上)

    在上一章节中,我们介绍了Unity的旧版动画系统,本章节来介绍新版的Mecanim动画系统。新版的Mecanim动画系统实际是对旧版动画系统的升级。新版的Mecanim动画系统仍然是建立在动画片段的基础上的,只不过它给我们提供了一个可视化的窗口来编辑动画片段之间的切换逻辑。接

    2024年02月08日
    浏览(36)
  • 第五十六章 Unity 音频播放

    Unity可以导入大多数标准音频文件格式,精通于在3D 空间中播放声音,还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情,但是为了模拟现实直接中的各种声音效果,Unity会提供各种各样的组件来实现。 首先,我们需要了解“多普勒效应”。他是一名奥地物理

    2024年02月07日
    浏览(31)
  • 第五十九章 Unity 发布Android平台

    本章节我们讲解如何打包发布到安卓手机平台。要为 Android 构建和运行应用程序,必须安装 Unity Android Build Support 平台模块。还需要安装 Android 软件开发工具包(SDK)和原生开发工具包(NDK)才能在 Android 设备上构建和运行代码。默认情况下,Unity 会安装基于 OpenJDK 的 Java 开

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包