Unity:输入系统(Input System)与持续检测键盘按键(Input.GetKey)_unity input.getkey
目录
Unity 的两套输入系统:
🔍 Input.GetKey 详解
🎯 对比:常用的输入检测方法
技术底层原理(简化版)
示例:角色移动
为什么会被“新输入系统”替代?
Unity 的两套输入系统:
UnityEngine.Input
Input.GetKey()
、Input.GetAxis()
等UnityEngine.InputSystem
Keyboard.current.spaceKey.wasPressedThisFrame
等Input.GetKey()
是 Unity 的旧输入系统(Old Input System)中用来检测键盘按键是否“持续按下”的方法。
Input.GetKey()
属于 Unity 的 旧版输入系统(Legacy Input System),也叫做:
✅ UnityEngine.Input
它来自 Unity 的核心命名空间:
using UnityEngine;
而不是新的 Input System 包(那个要安装)。
🔍 Input.GetKey 详解
用法:
if (Input.GetKey(KeyCode.Space)) { // 玩家按住了空格键,执行跳跃蓄力}
参数:
KeyCode
是 Unity 定义的一个枚举,包含了键盘上所有按键的标识:
KeyCode.A // 字母 A 键KeyCode.Space // 空格键KeyCode.LeftArrow // 左方向键KeyCode.Return // 回车键
🎯 对比:常用的输入检测方法
Input.GetKey(KeyCode.X)
Input.GetKeyDown(KeyCode.X)
Input.GetKeyUp(KeyCode.X)
技术底层原理(简化版)
在 Unity 的旧输入系统中:
-
Unity 会每帧读取当前操作系统的键盘状态
-
Input.GetKey()
就是访问这个“键盘状态快照”的一个函数 -
它只在 MonoBehaviour 的
Update()
或FixedUpdate()
中有效
❗ 注意:你不能在 Awake()
或 Start()
里用 GetKey()
,因为那时候 Unity 还没开始检测输入帧。
示例:角色移动
void Update() { if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(Vector2.right * speed * Time.deltaTime); }}
这个例子做了什么?
-
每帧检测玩家是否按住右方向键
-
如果按住,就让角色持续向右移动
为什么会被“新输入系统”替代?
Unity 推出新的 Input System
原因:
不过很多 2D 游戏和初学项目,用旧系统就很够用,而且更简单。