【Unity InputSystem】基础教程(保姆级超详细超基础!!!)

这篇具有很好参考价值的文章主要介绍了【Unity InputSystem】基础教程(保姆级超详细超基础!!!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.基础概念

1-1.前言

随着Unity的不断发展,开发者们对Unity的项目输入系统要求也越来越高,经常会有项目在做多平台适配和跨平台移植时对变更输入系统而感到烦恼。而InputSystem这款插件正是Unity官方为了解决广大开发者而推出的一款新的输入方式。
相较于旧版的InputManager,InputSystem的操作虽然更为繁琐复杂,但应对跨平台项目时面对不同的输入方式InputSystem的输入映射机制则为开发者们提供了巨大的便捷,这也是我们要学习InputSystem的原因。

如果觉得图文教程不够详细的朋友可以移步到 【InputSystem基础教程】观看视频教程。

2.基础操作

2-1插件安装

1.我们打开Unity上方工具栏中的Window =>Package Manager打开Unity插件包管理界面input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
2.点击右上角Package选项中Unity Registry,然后在右侧搜索栏中搜索Input
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
3.找到InputSystem插件,点击安装
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏

2-2.如何创建InputActions

1.安装插件后在项目Project中右键点击Creater若出现InputActions选项证明插件安装成功,点击创建InputActions。
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
2.创建InputActions成功后双击打开InputActions编辑页面,此时我们有几个参数需要了解并使用的。

2-3.InputActions概念及结构关系

在我们InputSystem中所用到结构关系为
InputSystem=>InputActions=>ActionMaps=>Actions

ActionMaps

简单来说我们可以将InputActions视为我们项目里其中一个控制器的输入操作管理集,而ActionMaps则为该控制器其中的一个输入映射集。
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏

Actions

而Actions则为ActionMaps里其中一个动作输入映射

ActionProperties

在Actions中也有许多参数,其中ActionType则是我们最常用到。其概念为我们该动作输入映射的类型,有以下三种类型
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
1.Button 默认设置,包括按钮或者按键触发的一次性动作
2.Value 提供一种连续状态变化事件,如果设置了多个输入,就会切换到最主要的一个。用它进行模拟控制,比如移动。
3.Pass Through 和Value很相似,但它不会像Value一样(如果有多个输入时,不会只选择最主要的那个,而把其他的输入忽略)

在使用Value或者Pass Through Types时,你会看到一个额外的选项 Control Type为该Value的返回值类型input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏

2-4.InputActions常用实例

在我们Unity项目中输入检测做常用的两种功能实现
1.角色移动时持续输入 - Value
在我们选择ActionType为Value之后会出现Control Type,以下为常用的Control Type列举

Control Type 使用场景
Axis 仅为单轴方向数值
Vector 2 为双轴方向数值
Vector 3 为三轴方向数值

2.攻击或点击菜单栏时一次性输入 - Button

2-5.动作映射调用

官方PlayerInput组件调用

我们需要在场景中在我们需要的对象上添加PlayerInput组件
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
随后我们需要在Player组件中选定我们刚刚创建好的InputActions,选择想要使用的输入映射集,再选择对应输入参数返回的调用方式BehaviorType
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
再BehaviorType中我们有四种不同的调用方式

1.Send Message

使用Send Message时,每次的触发会盗用一个对应的函数(就是在对应的Actions名前面加个On-)正如下图所示在我们PlayerInput组件当中我们将BehaviorType选择了Send Message后我们的输入参数将会通过Send Message方法发送到我们对应生成的函数中
比如Input Action 名为 Jump,那么对应的函数即为 OnJump
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏

获取输入时的数据,我们可以写一个输入控制类,在该类中调用我们上述说到的Actions生成函数
可以通过isPressed获取设置了ActionType为Button类型的动作是否点击
可以通过Get 获取设置了ActionType为Value对应类型的数据

public class PlayerController : MonoBehaviour
{
    void OnAction1(InputValue value)
    {
        bool isAction1Pressd = value.isPressed;
        Debug.Log(isAction1Pressd);
    }
    void OnMove(InputValue value)
    {
        Vector2 moveVal = value.Get<Vector2>();
        Debug.Log(moveVal );
    }
    void OnJump(InputValue value) 
    { 
        float triggerVal = value.Get<float>(); 
        Debug.Log(triggerVal );
    }
}
2.Broadcast Messages

Broadcast Messages 与 send Message 很相似(但目前我还没有搞懂具体区别)

3.Invoke Unity Events

区别于上述两种BehaviorType不同的是,在我们选择该方法后会出现Events的选项,我们需要自己写好动作方法后将其挂载到我们对应的ActionMaps中对应的ActionEvents上才能触发对应的动作事件。
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏
在我们写的动作方法中需要在方法入参处加上InputAction.CallbackContext类型的入参,通过此参数我们才能获取我们对应输入返回(且加入该参数后会将其方法置顶如上图所示)

public class PlayerController : MonoBehaviour
{
    public void moveControl(InputAction.CallbackContext value)
    {
        Vector2 moveVal = value.ReadValue<Vector2>();
        Debug.Log(moveVal);
    }
}
4.Invoke C Sharp Events

与Invoke Unity Events方式其实大致相同,需要我们自己先写好一个带有InputAction.CallbackContext类型入参的动作方法,不同的是我们挂载方式变成了脚本事件加载而不是在Unity界面上的可视化挂载

using UnityEngine;
using UnityEngine.InputSystem;
public class CSharpEvent : MonoBehaviour
{
    public PlayerInput playerInput;
    void OnEnable()
    {
        playerInput.onActionTriggered += MyEventFunction;
    }
    void OnDisable()
    {
        playerInput.onActionTriggered -= MyEventFunction;
    }
    void MyEventFunction(InputAction.CallbackContext value)
    {
        Debug.Log(value.action.name + (" was triggered"));
    }
}

提示:在我自己尝试下发现上述四种的官方组件调用方式都只在输入发生时触发时发送一次输入返回,并不会持续发送,所以如果要实现输入控制角色移动这种需要持续返回输入信号功能的并不适合该方式该方式仅适合如菜单界面点击按钮或者跳跃功能这种仅需输入时触发一次返回的功能。

脚本调用

基于上述提示,所以官方PlayerInput组件调用动作事件函数时并不能满足我们所有的场景需求(也可能是我在持续返回信号上没找到解决方案),所以我们还需要学习一下不借助官方PlayerInput组件的事件调用。我们直接在我们的脚本中调用InputSystem中的动作事件。

在我们使用脚本调用之前我们需要做一件事情,在我们创建好的InputActions属性面板中找到Generate C# Class并勾选,随后点击Apply生成对应的脚本,之后我们就可以在我们自己写的PlayerController 类中调用该脚本了
input system unity,Unity,Unity插件,unity,游戏引擎,c#,游戏程序,游戏

不知道怎么说明了,直接上代码(自己看注释理解)

using UnityEngine;
using UnityEngine.InputSystem;
public class CSharpEvent : MonoBehaviour
{
    private PlayerInputActions playerInputActions;
    //将对应的ActionMaps中对应的Action进行传址引用
    public Vector2 keyboardMoveAxes => playerInputActions.keyboard.moveControl.ReadValue<Vector2>();
    
    void Awake() {
    	//实例化InputActions脚本
        playerInputActions = new PlayerInputActions();
    }
    private void OnEnable(){
    	//将要使用的ActionMap开启
        playerInputActions.keyboard.Enable();
    }
    private void OnDisable()
    {
    	//上述同理
        playerInputActions.keyboard.Disable();
    }
    private void Update()
    {
    	//在帧更新方法中调用所写的动作方法
        movePlayer();
    }
    private void movePlayer(){
    	//因为要在Update方法中使用,需要需要先判断是否有输入对应的Input操作
        if(keyboardMoveAxes != Vector2.zero){
        	//判断有输入后便执行对应方法
            Debug.Log(keyboardMoveAxes);
        }
    }
}

3.引用文献

Unity InputSystem官方使用手册

Unity input system 使用记录(实例版)- 作者 : xkxsxkx

Unity New Input System 作者 : 小虫儿飞到花丛中

以上就是本文章全部内容了,如果觉得实用可以点个收藏和关注。博主空间还有更多和Unity相关的实用技巧欢迎大家来一起相互学习。

更详细的视频教程:日醉夜的狗-【Unity】InputSystem基础教程系列

下一期InputSystem进阶实用技巧(实现角色移动跳跃等功能) 【Unity】InputSystem实用教程文章来源地址https://www.toymoban.com/news/detail-678714.html

到了这里,关于【Unity InputSystem】基础教程(保姆级超详细超基础!!!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • JDBC 技术 | Java连接MySQL数据库(四万字零基础保姆级超全详解)

    管他啥是啥,看就完了!如果觉得博主写的不错,可以点赞关注支持一下博主哦!有什么地方存在不足或者错误的,烦请各位大佬在评论区指正。万分感谢!! 本文结合了韩顺平零基础学java,黑马程序员零基础学 JavaWeb,等多个视频的相关知识内容整理而来。花费了很多很多

    2024年02月05日
    浏览(69)
  • 【Unity_Input System】Input System新输入系统(一)

    目录 一、导入Input System包 二、使用方式1:直接从输入设备对应类中获取输入 三、使用方式2:用代码创建InputAction获取输入 四、使用方式3:用Player Input组件获取输入 五、使用方式4:用Input Action Asset生成C#代码获取输入 打开包管理器,搜索Input System,点击右下角安装。 安装

    2024年02月08日
    浏览(44)
  • 【Unity_Input System】Input System新输入系统(二)

    目录 六、Action Phase 七、Input Action Asset文件 1.Bindings Mode  1Binding 2PositiveNegative Binding 3UpDownLeftRight Composite 4UpDownLeftRightForwardBackward Composite 5Binding with one modifier 6Binding with two modifier 2.Binding Path 3.Action Type 4.Initial State Check 5.Interaction 1Default Interaction 2Press Interaction 3Hold Inter

    2024年02月03日
    浏览(53)
  • Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文)

    说明: 本篇将详细介绍用二进制安装包部署hadoop等组件,注意事项,各组件的使用,常用的一些命令,以及在部署中遇到的问题解决思路等等,都将详细介绍。 ip hostname 192.168.1.11 node1 192.168.1.12 node2 192.168.1.13 node3 1.2.1系统版本 1.2.2内存建议最少4g、2cpu、50G以上的磁盘容量 本次

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

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

    2024年02月04日
    浏览(50)
  • 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日
    浏览(33)
  • Unity 新版输入系统(Input System)

    官方教程 注意 新的输入法系统需要 Unity 2019.4+ 和 .NET 4 运行时。它不适用于 .NET 3.5 的项目。 教程版本:Unity 2021.3.26 导航栏 - Window - Package Manager 选择 Unity Registry 在列表中找到 Input System 点击 Install 安装 点击 Yes 启用新版 Input System 等待Unity重新启动 Unity 默认会同时启用旧版和

    2024年04月23日
    浏览(47)
  • Unity InputSystem 基础使用之鼠标交互

    官方文档 Package Manager 搜索Input System进行下载 启用该包,会重启Unity Editor InputSystem可以和旧版输入系统一起使用 设置:Project Settings-Player-Other Settings-Configuration-Active Input Handling 参数可选:Input Manager(old),Input System Package(New),Both

    2024年02月08日
    浏览(36)
  • Unity新(Input System)老(Input Manager)输入系统代码对比

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

    2024年02月16日
    浏览(46)
  • 第五十二章 Unity Input System 新输入系统

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

    2024年02月07日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包