关于Unity新输入系统的简单使用

854 阅读2分钟

关于Unity新输入系统的简单使用

安装新的输入系统

1、在Package Manager中找到Input System,点击Install 2、可以在Assets中的Input System的Inspector中找到Open Input Setting Window,打开Input System的默认设置

image.png image.png

新输入系统的使用

1、在Project中创建一个Input Actions

image.png

2、打开Input Action并将Action命名为PlayerActions(自定义,注意后面在C#中定义类对象时与改名字保持一致)

3、在Action Maps栏中,可以点击+创建不同的Action Maps。不同的Action Map相当于不同的映射关系,可以用于不同情况下,按键输入(也可以是别的输入)的作用

image.png

4、在Actions窗口中,可以点击+,来生成不同的按键作用,例如移动、跳跃等。

image.png

5、在建立了Actions之后,可以在单个Action中,建立不同的输入与该Action进行关联。

image.png


image.png 如上图,在单个的Action中,Action Type有Value、Button、Pass Through三种。
Value:在值产生变化的时候,才会触发Action
Button:在改变按钮状态的时候触发Action(使用按钮包括跟按钮相关的任何操作,例如:按下、抬起等)
Pass Through:与Value类型类似,但不包括变化的最开始与最后状态


image.png

如上图,在Interacions中可以改变触发的交互信息
Hold:长按
Multi Tap:多次点击
Press:按下
Slow Tap:长按后抬起
Tap:轻点后抬起


image.png 如上图,数据的处理方式,例如:反转,标准化。

6、在C#脚本中的使用

private PlayerActions input;

private void Awake()
{
    input = new PlayerInput;
}

private void OnEnable()
{
    input.PlayerActions.Enable();
    input.PlayerActions.Jump.performed += Jump;     //这里的PlayerActions是之前自定义的Player Input类
    input.PlayerActions.Move.performed += Move;
}

private void Jump(InputAction.CallbackContext obj)
{
    Debug.Log(obj.ReadValueAsButton());       //返回True,False的Button状态
}

private void Move(InputAction.CallbackContext obj)
{
    Debug.Log(obj.ReadValue<Vector2>())       //Move设置的是一个Vector2类型2D Composite
}

private void Disable()
{
    input.PlayerActions.Jump.performed -= Jump;
    input.PlayerActions.Move.performed -= Move;
    input.PlayerActions.Enable();
}

7、在Player Input组件中使用

给Player物体上,在Inspectors中,点击Add Component,添加Player Input组件

image.png


在Actions中,添加之前制作的PlayerActions

image.png

可以在Behavior中选择Invoke Unity Events,再点看下面的PlayerActions为Jump(),Move()添加绑定的方法