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

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

这里是官方英文文档

首先,确保你的项目是Unity 2019.1以上版本, 并且API设置为 .NET 4 runtime( 2021/1/23更新)

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

然后导入package:windows->package manager

unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
然后选择Unity Registry
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
Advanced中选中Show preview packages
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
之后你可以寻找或者自主搜索Input System,右下角会显示download,下载完毕后import即可(我已经导入过了所以这里只显示remove(移除))
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
点击确定后让unity重启(2021/1/23更新)
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)

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

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

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

unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
(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更新)

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

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

unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
双击打开->Add Control Scheme->重命名Scheme Name->点击加号寻找操作系统XboxController->save

unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
好了,现在你可以开始进行按键设置了: 添加动作集和相应动作,以player map以及其movement移动为例: 先将movement的属性Action type 由默认的Button改为Pass through或Value;然后更改Control Type为Vector2(因为一般移动只有四个方向,二维的,Vector2正合适)

(2021/1/23更新)

Action Type 解释
Value 当你绑定了多个输入设备。如果你在同一时间内,只希望有一个输入设备在使用,就选这个(如果选了这个,并且在同一时间使用了两个输入设备,unity就只认输入值大的那个)
Pass through 当你绑定了多个输入设备。如果你在同一时间内,还想处理多个输入设备的输入值,选这个
Button 顾名思义,只要是按键就选这个(用键盘的话,基本上就是这个了)
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)

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

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

将2D Vector 的Mode改为Analog,这样可以完美发挥摇杆输入是浮点数的优势(当然,这一步并不是必要的)

unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
然后选中movement下的Binding,在右边path处:GamePad->Xbox Controller->Left Stick->Up(当然你想选右边的right Stick也可以,就是玩着可能有点别扭哈哈) 不过我个人更喜欢用listen功能,在已经连接手柄的情况下,点击后可以你只需要上推一下左边的摇杆,下面就直接显示出来了,省劲。 剩下的三个如法炮制……
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
好了,设置完毕,下面是最重要的事情:保存!Save!SaveAsset!(重要的事情说三遍) 如果你选中了Auto-Save,那当我没说哦。(不过你可能会跟我一样每次操作都会卡一下,不说卡到怀疑人生,但就是恶心哈哈,可能这就是低配电脑的命吧……)
unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)

将刚才设置好的InputControl加到胶囊胶囊体的Actions上,其他内容默认即可(2021/1/23更新)

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

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

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就行咯:

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

unity 最新输入系统Input system简介,并用其设置Xbox(plus:unity package导入详解)
是不是比movement简单多了?

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