3.代码检测键盘输入

3.代码检测输入-键盘输入


3.1 知识点

获取当前键盘设备(需要引用命名空间)

  • 新输入系统 提供了对应的输入设备类 帮助我们对某一种设备输入进行检测
  • using UnityEngine.InputSystem;
  • 声明键盘类对象 得到当前连接电脑的键盘
Keyboard keyBoard = Keyboard.current;

单个按键 按下抬起长按

  • 按键检测一般写在Update内
  • 首先要得到某一个按键 通过键盘类对象 点出 各种按键 来获取 比如
    • keyBoard.aKey a键
    • keyBoard.enterKey 回车键
  • 空格键 当前帧 是否按下
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
    print("空格键按下");
}
  • 判断D键是否释放 抬起
if (Keyboard.current.dKey.wasReleasedThisFrame)
{
    print("D键抬起");
}
  • 判断空格是否一直处于按下状态 长按
if (Keyboard.current.spaceKey.isPressed)
{
    print("空格按下状态");
}

通过事件监听按键按下

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

  • 通过lambda表达式添加的监听没有办法取消

keyBoard.onTextInput += (c) =>
{
    print("通过lambda表达式" + c);
};
  • 通过普通函数添加的监听没有办法取消
private void TextInput(char c)
{
    print("通过函数进行事件监听" + c);
}
keyBoard.onTextInput += TextInput;
//keyBoard.onTextInput -= TextInput;

任意键按下监听

  • 可以处理 任意键 按下 抬起 长按 相关的逻辑
  • keyBoard.anyKey
  • wasPressedThisFrame
  • wasReleasedThisFrame
  • isPressed
  • 缺点是不能知道按下的键是什么
  • 任意键按下了
if (Keyboard.current.anyKey.wasPressedThisFrame)
{
    print("任意键按下");
}

3.2 知识点代码

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

public class Lesson03_代码检测输入_键盘输入 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 获取当前键盘设备(需要引用命名空间)
        //新输入系统 提供了对应的输入设备类 帮助我们对某一种设备输入进行检测
        //using UnityEngine.InputSystem;
        //声明键盘类对象 得到当前连接电脑的键盘
        Keyboard keyBoard = Keyboard.current;
        #endregion

        #region 知识点二 单个按键 按下抬起长按


        #endregion

        #region 知识点三 通过事件监听按键按下

        //通过给keyboard对象中的 文本输入事件 添加委托函数
        //便可以获得每次输入的内容
        keyBoard.onTextInput += (c) =>
        {
            print("通过lambda表达式" + c);
        };

        keyBoard.onTextInput += TextInput;
        //通过lambda表达式表达式添加的监听没有办法取消
        //keyBoard.onTextInput -= TextInput;

        #endregion


    }

    #region 知识点三 通过事件监听按键按下
    private void TextInput(char c)
    {
        print("通过函数进行事件监听" + c);
    }
    #endregion

    void Update()
    {
        #region 知识点二 单个按键 按下抬起长按

        //按键检测一般写在Update内

        //首先要得到某一个按键 通过键盘类对象 点出 各种按键 来获取 
        //比如
        //keyBoard.aKey a键
        //keyBoard.enterKey 回车键


        //空格键 当前帧 是否按下
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            print("空格键按下");
        }

        //判断D键是否释放 抬起
        if (Keyboard.current.dKey.wasReleasedThisFrame)
        {
            print("D键抬起");
        }

        //判断空格是否一直处于按下状态 长按
        if (Keyboard.current.spaceKey.isPressed)
        {
            print("空格按下状态");
        }

        #endregion

        #region 知识点四 任意键按下监听

        //可以处理 任意键 按下 抬起 长按 相关的逻辑
        //keyBoard.anyKey
        //wasPressedThisFrame
        //wasReleasedThisFrame
        //isPressed

        //缺点是不能知道按下的键是什么

        //任意键按下了
        if (Keyboard.current.anyKey.wasPressedThisFrame)
        {
            print("任意键按下");
        }

        #endregion

    }
}

3.3 练习题

利用目前所学知识,用新输入系统的键盘输入制作一个这样的功能:场景上有一个3D立方体,按键盘上的+和-可以对其进行缩放,缩放系数默认为1,最小为1,每按 + 一次,缩放系数+1,每按 - 一次,缩放系数-1

定义缩放因子变量和要缩放的对象transform变量,引入新输入系统命名空间

using UnityEngine.InputSystem;

public Transform obj; // 需要进行缩放的物体的Transform组件
private int scaleFactor = 1; // 缩放因子,默认为1

Update中检测加号减号的按下和长按,改变缩放因子赋值给要缩放的对象transform的localScale

// 检测"+", "=", "numpad +" 或 "numpad =" 键是否在当前帧按下
if (Keyboard.current.numpadPlusKey.wasPressedThisFrame ||
    Keyboard.current.equalsKey.wasPressedThisFrame)
{
    scaleFactor += 1; // 缩放因子增加1
    obj.localScale = Vector3.one * scaleFactor; // 将物体的缩放应用到缩放因子
}

// 检测"-", "numpad -" 键是否在当前帧按下
if (Keyboard.current.numpadMinusKey.wasPressedThisFrame ||
    Keyboard.current.minusKey.wasPressedThisFrame)
{
    scaleFactor -= 1; // 缩放因子减少1
    if (scaleFactor < 1) // 防止缩放因子小于1
        scaleFactor = 1;
    obj.localScale = Vector3.one * scaleFactor; // 将物体的缩放应用到缩放因子
}

3.4 练习题代码

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

public class Lesson03_练习题 : MonoBehaviour
{
    //利用目前所学知识
    //用新输入系统的键盘输入制作一个这样的功能
    //场景上有一个3D立方体,按键盘上的+和-可以对其进行缩放
    //缩放系数默认为1,最小为1
    //每按 + 一次,缩放系数+1
    //每按 - 一次,缩放系数-1



    public Transform obj; // 需要进行缩放的物体的Transform组件

    private int scaleFactor = 1; // 缩放因子,默认为1

    void Update()
    {
        // 检测"+", "=", "numpad +" 或 "numpad =" 键是否在当前帧按下
        if (Keyboard.current.numpadPlusKey.wasPressedThisFrame ||
            Keyboard.current.equalsKey.wasPressedThisFrame)
        {
            scaleFactor += 1; // 缩放因子增加1
            obj.localScale = Vector3.one * scaleFactor; // 将物体的缩放应用到缩放因子
        }

        // 检测"-", "numpad -" 键是否在当前帧按下
        if (Keyboard.current.numpadMinusKey.wasPressedThisFrame ||
            Keyboard.current.minusKey.wasPressedThisFrame)
        {
            scaleFactor -= 1; // 缩放因子减少1
            if (scaleFactor < 1) // 防止缩放因子小于1
                scaleFactor = 1;
            obj.localScale = Vector3.one * scaleFactor; // 将物体的缩放应用到缩放因子
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏