unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)

3,346 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

unity推出了最新的输入系统Input system,不敢说一定比老版本Input manager好。键盘输入的话,个人觉得还是老的输入系统好,不过如果是Xbox手柄的话,个人认为新系统坐实舒服!就让喜新厌旧的我带大家看看吧哈哈

这里是官方英文文档

首先,确保你的项目是Unity 2019.1以上版本, 并且API设置为 .NET 4 runtime( 2021/1/23更新) 在这里插入图片描述

然后导入package:windows->package manager在这里插入图片描述 然后选择Unity Registry 在这里插入图片描述 Advanced中选中Show preview packages 在这里插入图片描述 之后你可以寻找或者自主搜索Input System,右下角会显示download,下载完毕后import即可(我已经导入过了所以这里只显示remove(移除)) 在这里插入图片描述 点击确定后让unity重启(2021/1/23更新) 在这里插入图片描述

Tip:记得检查一下你的Edit->Project Settings->Player->Other Settings->Active Input Handing,它默认应该是Both(即两种都可用),你只要保证它不是Input Manager(Old)即可 (现在导入input system后会自动改为Input SystemPackage) 在这里插入图片描述

以前应该是自动创建的,现在需要点一下才能创建setting asset(我点过了,没这个图了……下图是另找的)(2021/1/23更新) 在这里插入图片描述 (2021/1/23更新)

Property介绍
Default Deadzone Min盲区的最小值,输入值小于该值就会被认为为0(这是为了防止无意的输入)
Default Deadzone Max盲区最大值,输入值大于该值则被认为是1(有些设备不会一直返回最大值,设置它可以帮助保持)
Default Button Press Point针对有按钮的设备,这代表它们需要被按住多长时间,系统才能认为它们已被按下
Default Tap Time针对触摸屏,同样代表它们需要被按住多长时间,系统才能认为它们已被按下
Default Slow Tap Time默认的慢点击时间.
Default Hold Time默认的持续按住的最短时间
Tap Radius在触摸屏上,两个手指点击之间的最大距离,系统认为这是同一触摸点击,而不是更多.
Multi Tap Delay Time两次点击之间的最小时延(也是给触摸屏用的)

下面就是在场景中创建一个物体(我选Capsule胶囊),然后给它命名为player,再给它添加Rigibody和player Input组件 (点Create Actions会创建一个unity已做好的Action模板,模板很全面,很有参考价值) (2021/1/23更新) 在这里插入图片描述

在project窗口下右键create->InputActions,做个重命名(此处命名为InputControl)

在这里插入图片描述 在这里插入图片描述 双击打开->Add Control Scheme->重命名Scheme Name->点击加号寻找操作系统XboxController->save

在这里插入图片描述 在这里插入图片描述 好了,现在你可以开始进行按键设置了: 添加动作集和相应动作,以player map以及其movement移动为例: 先将movement的属性Action type 由默认的Button改为Pass through或Value;然后更改Control Type为Vector2(因为一般移动只有四个方向,二维的,Vector2正合适)

(2021/1/23更新)

Action Type解释
Value当你绑定了多个输入设备。如果你在同一时间内,只希望有一个输入设备在使用,就选这个(如果选了这个,并且在同一时间使用了两个输入设备,unity就只认输入值大的那个)
Pass through当你绑定了多个输入设备。如果你在同一时间内,还想处理多个输入设备的输入值,选这个
Button顾名思义,只要是按键就选这个(用键盘的话,基本上就是这个了)
在这里插入图片描述

右键movement,Add 2D Vector Composite添加2D操作内容 (也可Add Binding,然后直接绑定遥感即可,自动就是二维的了) 在这里插入图片描述

将2D Vector 的Mode改为Analog,这样可以完美发挥摇杆输入是浮点数的优势(当然,这一步并不是必要的) 在这里插入图片描述 然后选中movement下的Binding,在右边path处:GamePad->Xbox Controller->Left Stick->Up(当然你想选右边的right Stick也可以,就是玩着可能有点别扭哈哈) 不过我个人更喜欢用listen功能,在已经连接手柄的情况下,点击后可以你只需要上推一下左边的摇杆,下面就直接显示出来了,省劲。 剩下的三个如法炮制…… 在这里插入图片描述 好了,设置完毕,下面是最重要的事情:保存!Save!SaveAsset!(重要的事情说三遍) 如果你选中了Auto-Save,那当我没说哦。(不过你可能会跟我一样每次操作都会卡一下,不说卡到怀疑人生,但就是恶心哈哈,可能这就是低配电脑的命吧……) 在这里插入图片描述

将刚才设置好的InputControl加到胶囊胶囊体的Actions上,其他内容默认即可(2021/1/23更新) 在这里插入图片描述

下面就是代码了,将这个脚本也挂上去就可以咯 注意最上面要有:

using UnityEngine.InputSystem;

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

public class Player : MonoBehaviour
{
    private bool grounded;		//判断是否在地面上
    private Vector2 moveValue;
    public float moveSpeed =3f; //移动速度
     
    private void Update()
    {
        transform.Translate(new Vector3(moveValue.x,0,moveValue.y)*moveSpeed*Time.deltaTime);
    }
    void OnMovement(InputValue value)   //用这个方法来响应你的输入
    {									//你是否也发现了它和InputControl中Actions里的名字很像呢?
        moveValue = value.Get<Vector2>();
        Debug.Log(value.Get<Vector2>());    //在console窗口显示你的输入值
    }
    void OnJump()       //附赠的跳跃方法哈哈
    {
        if (grounded)
        {
            GetComponent<Rigidbody>().velocity += new Vector3(0, 5, 0);
            grounded = false;
            Debug.Log("I am Pressing Jump");
        }
    }
    private void OnCollisionEnter(Collision collision)
    {
        grounded = true;
    }
}

聪明如你是不是已经发现了方法名称和Actions有什么联系了呢?

你是不是还想知道跳跃是怎么设置的?如下添加Action和binding就行咯:

在这里插入图片描述

在这里插入图片描述 是不是比movement简单多了?

现在你可以按照自己的创意玩转新输入了!!!