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