Unity 新版输入系统(Input System)

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

前言

官方教程

注意
新的输入法系统需要 Unity 2019.4+ 和 .NET 4 运行时。它不适用于 .NET 3.5 的项目。
教程版本:Unity 2021.3.26

1. 安装

1.1 打开 Package Manager

导航栏 -> Window -> Package Manager

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

1.2 安装 Input System

选择 Unity Registry 在列表中找到 Input System 点击Install安装

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

点击 Yes 启用新版 Input System 等待Unity重新启动

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

Unity 默认会同时启用旧版和新版输入系统,你可以在 Player settings 中(Edit -> Project Settings -> Player ->Active Input Handling 找到相应的设置。可以随时修改这里的设置,这样做依然会重启编辑器。

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

2. 入门指南

2.1 快速监听某个按键按下抬起操作

void Update()  
{  
    // 检查空格键是否在这个帧被按下  
    if (Keyboard.current.spaceKey.wasPressedThisFrame)  
    {        
	    Debug.Log("Space key was pressed");  
    }   
    // 检查空格键是否在这个帧被释放  
    if (Keyboard.current.spaceKey.wasReleasedThisFrame)  
    {        
	    Debug.Log("Space key was released");  
    }   
    // 检查左鼠标键是否在这个帧被按下  
    if (Mouse.current.leftButton.wasPressedThisFrame)  
    {        
	    Debug.Log("Left mouse button was pressed");  
    }  
    // 检查左鼠标键是否在这个帧被释放  
    if (Mouse.current.leftButton.wasReleasedThisFrame)  
    {        
	    Debug.Log("Left mouse button was released");  
    }
}

2.2 使用可视化编辑器来建立映射

Project -> Create -> Input Actions

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

新建 Input Actions 给其命名(名称无所谓),笔者命名为 Test Input Controls 完成后,选中该文件勾选 Generate C# Class点击 Apply 后 Unity 会为我们生成一个 Action 的包装类,方便后续在代码中引用。

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

Action Map
可以理解为一个组织和管理输入动作的一种方式。通过将相关的输入动作放在同一个Action Map中,可以更好地管理输入逻辑。例如,可以将所有与玩家移动相关的输入动作放在一个叫做"Movement"的Action Map中。

Action
一个具体的输入动作,比如按键按下、摇杆移动等。

生成结束点击 Edit asset 创建第一个 Action Map 并将其命名为 Player 并将 Actions 列表生成的 Action 重命名为 Fire

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

选中 < No Binding >Fire Action 映射对应的按键(按键可以自定义,笔者映射的按键为键盘的 K 键)

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

也可以绑定多个按键对应不同的操作设备,笔者映射的第二个按键为鼠标左键

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎
完成上述操作后点击 Save Asset 保存当前映射表,这样做可以绑定多个物理输入得到的输入值也只会影响同引用的 Action 对象。

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

2.3 通过代码监听映射表中的按键

创建测试脚本 TestInputSystem (命名可随意),我们需要使用之前的 TestInputControls ,通过监听 startedcanceled 实现按键按下抬起操作。具体可参考下述代码

// 输入控制类的实例  
private TestInputControls InputControls;  
  
void OnEnable()  
{  
    InputControls = new TestInputControls(); // 创建输入控制实例  
    InputControls.Player.Fire.started += OnFireDown; // 注册开火开始动作的回调  
    InputControls.Player.Fire.canceled += OnFireUp; // 注册开火结束动作的回调  
    InputControls.Enable(); // 启用输入控制  
}  
  
//当开火动作被触发时调用此方法。  
private void OnFireDown(InputAction.CallbackContext Obj)  
{  
    Debug.Log($"Fire Down | KeyName:{Obj.control.name}"); // 输出"Fire Down"到控制台 
}
  
//当开火动作释放时调用此方法。  
private void OnFireUp(InputAction.CallbackContext Obj)  
{  
    Debug.Log($"Fire Up | KeyName:{Obj.control.name}"); // 输出"Fire Up"到控制台 
}
  
//主要用于移除输入动作的回调函数,并禁用输入控制。  
private void OnDisable()  
{  
    InputControls.Player.Fire.started -= OnFireDown; // 移除开火开始事件的监听器  
    InputControls.Player.Fire.canceled -= OnFireUp; // 移除开火结束事件的监听器  
    InputControls.Disable(); // 禁用输入控制  
}

测试效果

可以看到,我们使用一套代码就可以同时监听键盘和鼠标的输入

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

按下抬起有了,要想实现长按也很简单。选中 TestInputControls 点击 Edit asset
Action Properties 一栏点击 Interactions 后方的+号添加 Hold

Hold:按下并按住至少设定的持续时间(默认为defaultHoldTime),则执行动作。(长按执行操作)
MultiTap:需要多次轻击(在tapTime内按下并释放),每次轻击之间的间隔不超过tapDelay秒(双击或多击)
Press:根据按钮的按下和释放顺序来触发特定的操作(例如:在按下按钮后执行某个动作或在释放按钮时执行某个操作)
SlowTap:按下并按住控件一段时间后释放时执行操作(长按释放后执行操作)
Tap:按下并按住小段时间内释放执行操作(点击)

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

添加完 Hold 后,我们看一下它的两个变量。如何默认值不能满足你的需求,取消勾选 Default 可自定义变量值。修改 Hold Time 变量一般即可满足需求

Press Point:按下按键这个阈值才能被认为是按下(笔者理解的是按压力度)
Hold Time:按下并按住按键保持的时间(以秒为单位)。

package manager-unity registry中安装input system,Unity 技术探索专栏,unity,游戏引擎

还是之前的代码在此基础上增加了长按监听的代码,具体参考下述代码

// 输入控制类的实例  
private TestInputControls InputControls;  
  
void OnEnable()  
{  
    InputControls = new TestInputControls(); // 创建输入控制实例  
    InputControls.Player.Fire.started += OnFireDown; // 注册开火开始动作的回调  
    InputControls.Player.Fire.performed  += OnLongPress; // 注册长按动作的回调  
    InputControls.Player.Fire.canceled += OnFireUp; // 注册开火结束动作的回调  
    InputControls.Enable(); // 启用输入控制  
}  
  
//当开火动作被触发时调用此方法。  
private void OnFireDown(InputAction.CallbackContext Obj)  
{  
    Debug.Log($"Fire Down | KeyName:{Obj.control.name}"); // 输出"Fire Down"到控制台 
}  
  
//当开火动作持续时调用的方法。  
private void OnLongPress(InputAction.CallbackContext Obj)  
{  
    Debug.Log($"Fire Long Press | KeyName:{Obj.control.name},持续时间{Obj.duration}"); // 输出动作持续时间  
}  
  
//当开火动作释放时调用此方法。  
private void OnFireUp(InputAction.CallbackContext Obj)  
{  
    Debug.Log($"Fire Up | KeyName:{Obj.control.name}"); // 输出"Fire Up"到控制台  
}  
  
//主要用于移除输入动作的回调函数,并禁用输入控制。  
private void OnDisable()  
{  
    InputControls.Player.Fire.started -= OnFireDown; // 移除开火开始事件的监听器  
    InputControls.Player.Fire.performed  -= OnLongPress; // 移除长按事件的监听器  
    InputControls.Player.Fire.canceled -= OnFireUp; // 移除开火结束事件的监听器  
    InputControls.Disable(); // 禁用输入控制  
}

经过上述步骤,我们学习到了新版 InputSystem 中的三个最基本的按键触发。文章来源地址https://www.toymoban.com/news/detail-856393.html

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

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

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

相关文章

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

    新输入系统InputSystem是2019年Unity新推出的插件。请注意,Unity默认使用旧的Input Manager,新的Input System处于未启用状态。当你安装Input System组件时,Unity会询问你是否启用新的输入系统。如果你选择Yes,Unity会启用新的并禁用旧的,之后编辑器将重新启动。具体的操作是,打开包

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

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

    2024年02月12日
    浏览(28)
  • 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日
    浏览(37)
  • 第五十章 Unity Input Manager 输入系统(上)

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

    2024年02月10日
    浏览(31)
  • Unity之新版输入系统InputSystem入门

    最近Unity版本全面升级到Unity2021了,着色器也全面使用URP,接下来毫无疑问,输入系统也要全面升级InputSystem,这也是Unity官方希望我们做的,毕竟现在都2023年了,我们的技术是需要跟上时代的步伐。 老版本的InputSysten系统,其实就一个Input静态类,官方给我们预定了一些常用

    2024年02月16日
    浏览(30)
  • 第五十一章 Unity Input Manager 输入系统(下)

    本章节我们就来使用水平轴和垂直轴来控制游戏物体的移动和旋转。我们之前大致讲过,游戏物体移动最重要的是方向,速度和时间三个要素,同样旋转也是。接下来,我们将之前创建的地形场景导入进来,如下所示 然后将之前的“MecanimDemo”工程里面的模型文件和动画文件

    2024年02月03日
    浏览(33)
  • Unity之新版输入系统InputSystem如何自定义InputActions

    上一篇文章,我们介绍了如何使用新版本的InputSystem,我们知道了InputActionsAsset给我们提供了更多的灵活性,扩展性和复用性。那么这篇文章我们就来介绍一下如何创建自定义InputActionAsset Input Action Asset 包含输入 Actions及其关联的Bindings和Control Schemes 的资源。这些资源文件扩展

    2024年02月11日
    浏览(38)
  • Unity SteamVR 开发教程:SteamVR Input 输入系统(2.x 以上版本)

    输入系统是 VR 开发中非常重要的一部分。我们通常需要获取 VR 手柄上某个按键的输入,然后将其作用到应用中,比如按下手柄的 Grip 键进行抓取,就需要在检测到“按下手柄 Grip 键”的输入操作时,执行抓取的行为。 SteamVR 插件是 Valve 提供给 Unity 开发者的用于开发 PCVR (头

    2024年02月08日
    浏览(38)
  • Unity 3D Input System的使用

    Input System是Unity新推出的输入系统,可以用作以前Input Manager的更具扩展性和可自定义性的替代方案。这里我将使用Unity 3D的Input System来实现一个FPS第一人称的游戏场景。 演示效果如下: 新建一个Unity 3D项目,在Asset Store里面下载StarterAssets - FirstPerson,然后在Package Manager里面导

    2024年02月20日
    浏览(27)
  • 【Unity学习笔记】New Input System 部分源码和测试用例补充

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/135630016 作者:CSDN@|Ringleader| 主要参考: Unity官方Input System手册与API 【Unity学习笔记】Unity TestRunner使用 NewIputSystem主体内容请参见:【Unity学习笔记】第十二 · New Input System 及其系统结构 和 源码浅析 注:本文使用的

    2024年01月22日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包