目錄
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 游戲和初學項目,用舊系統就很夠用,而且更簡單。
?