U4S1L14——获取任意键输入的信息

本章代码关键字

1
2
InputSystem.onAnyButtonPress.CallOnce()    //输入一次传入到此方法传入的监听函数内
InputSystem.onAnyButtonPress.Call() //每次输入都传入到此方法传入的监听函数内

回顾学过的获取任意键输入的方法

  1. 键盘任意键按下

    不能获取到具体的键位

    image

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public InputAction input;

    void Start()
    {
    input.Enable();
    input.performed += (context) =>
    {
    print("任意键按下");
    print(context.control.name);
    print(context.control.path); //以上两个语句并不能获取到具体的键位
    };
    }
  2. 键盘任意键按下字符

    只能获取到可以具体显示的字符,对于方向键或者End键等等特殊按键不起作用

    1
    2
    3
    4
    Keyboard.current.onTextInput += (c) =>
    {
    print(c); //这个语句只能获取到可以具体显示的字符,对于方向键或者End键等等特殊按键不起作用
    };

InputSystem中专门用于任意键按下的方案

下面的方法,都需要传入一个使用InputControl​作为参数的方法,用来执行接收到输入的逻辑

  • CallOnce​ 只会执行一次

    1
    2
    3
    4
    5
    InputSystem.onAnyButtonPress.CallOnce((control) =>
    {
    print(control.name);
    print(control.path);
    });
  • 如果用 Call​,按键盘会报错(实际测试下来,Unity2021版不会出现报错, 但是会出现即使关闭运行,仍然会检测输入,仍然会输出打印的键位的问题 重新编译脚本可以解决),但是也能正常执行

    1
    2
    3
    4
    5
    InputSystem.onAnyButtonPress.Call((control) =>
    {
    print(control.path);
    print(control.name);
    });