U4S1L2——键盘输入

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
UnityEngine.InputSystem                //InputSystem的命名空间
Keyboard //键盘类
Keyboard.current //获取当前活跃的键盘设备的属性
KeyControl //键盘按键类
keyControl.wasPressedThisFrame //该键盘按键是否在这一帧被按下
keyControl.wasReleasedThisFrame //该键盘按键是否在这一帧抬起
keyControl.isPressed //该键盘按键是否在这一帧被按住
keyboard.onTextInput //通过事件监听按键按下
keybroad.anyKey //该键盘的任意一个按键
keyboard.anyKey.wasPressedThisFrame //该键盘在这一帧是否从没有按键按下变为有按键被按下,也就是说在上一帧没有按键输入而这一帧被按下了任意一个按键就触发一次
keyboard.anyKey.wasReleasedThisFrame //该键盘在这一帧是否从有按键按下变为没有按键按住,也就是说所有被按下的按键都抬起了,就触发一次
keyboard.anyKey.isPressed //该键盘在这一帧里是否有任意一个按键被按住

获取当前键盘设备

需要引用命名空间UnityEngine.InputSystem
新输入系统提供了对应的输入设备类,帮助我们对某一种设备输入进行检测

1
Keyboard keyboard = Keyboard.current;    //获取当前活跃的键盘设备

单个按键按下抬起长按

首先要得到某一个按键,通过 键盘类Keyboard​对象 点出 各种按键KeyControl​对象 来获取,格式如下keybroad.___key
这里用a键举例,获取a键通过keyboard.aKey​这种属性获取

  • 按下

    1
    2
    3
    4
    5
    6
    7
    8
    void Update()
    {
    //空格键 当前帧 是否按下
    if (Keyboard.current.spaceKey.wasPressedThisFrame)
    {
    print("空格按下");
    }
    }
  • 抬起

    1
    2
    3
    4
    5
    6
    7
    8
    void Update()
    {
    //D键 当前帧 是否抬起
    if (Keyboard.current.dKey.wasReleasedThisFrame)
    {
    print("D键抬起");
    }
    }
  • 按住

    1
    2
    3
    4
    5
    6
    7
    8
    void Update()
    {
    //空格键 当前帧 是否按住中
    if (Keyboard.current.spaceKey.isPressed)
    {
    print("空格正在被按住");
    }
    }

通过事件监听按键按下

通过给keyboard​对象中的 文本输入事件 添加委托函数,便可以获得每次输入的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Start()
{
Keyboard keyboard = Keyboard.current;
keyboard.onTextInput += (c) =>
{
print("通过lambda表达式进行事件监听:" + c);
};
keyboard.onTextInput += TextInput;
}

private void TextInput(char c)
{
print("通过函数进行事件监听:" + c);
}

任意键按下监听

可以处理 任意键 按下 抬起 长按 相关的逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//注意,这里是只要有按键被按下就会触发,如果是一个按键被按住时,另一个按键按下则不触发
if (Keyboard.current.anyKey.wasPressedThisFrame)
{
print("有按键被按下了");
}
//注意,这里是只要有一个按键被按住就会触发,如果是多个按键被按住这一帧只会触发一次
if (Keyboard.current.anyKey.wasReleasedThisFrame)
{
print("所有按键都抬起了");
}
//注意,这里是在所有被按下的按键抬起后才会触发,也就是说,当按住多个键而其中一个键抬起时,这里不触发,只有所有被按下的按键都抬起了才会触发!
if (Keyboard.current.anyKey.isPressed)
{
print("有按键被按住了");
}