Unity:输入系统(Input System)与持续检测键盘按键(Input.GetKey)

发布于:2025-05-09 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

Unity 的两套输入系统:

🔍 Input.GetKey 详解

🎯 对比:常用的输入检测方法

技术底层原理(简化版)

示例:角色移动 

为什么会被“新输入系统”替代?


Unity 的两套输入系统:

系统 名称 使用方式 是否需要安装
旧输入系统 UnityEngine.Input Input.GetKey()Input.GetAxis() ❌ 不需要
新输入系统 UnityEngine.InputSystem Keyboard.current.spaceKey.wasPressedThisFrame ✅ 需要安装 Input System 包

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) 是否“持续”按下按键 X 按着的时候每帧都为 true 持续踩油门
Input.GetKeyDown(KeyCode.X) 是否“在这一帧刚刚按下”按键 X 只在按下的那一帧为 true 点一下油门
Input.GetKeyUp(KeyCode.X) 是否“在这一帧刚刚松开”按键 X 只在松开的那一帧为 true 抬脚松油门

技术底层原理(简化版)

在 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 游戏和初学项目,用旧系统就很够用,而且更简单。

 


网站公告

今日签到

点亮在社区的每一天
去签到