?
目錄
主要用途
檢測按鍵事件:
處理鍵盤輸入:
基本鍵位?
常用鍵:
字母鍵:
數字鍵:
功能鍵:
方向鍵:
控制鍵:
鼠標鍵:
其他特殊鍵:
??代碼示例
按下與抬起空格
?檢測方向鍵來移動游戲對象
同時檢測多個鍵
暫停和恢復
通過數字鍵切換武器
注意事項
在不同操作系統(如Windows、MacOS、Linux)上的差異
處理特殊鍵(如Ctrl、Alt、Shift)的事件
?Input.GetKeyDown(KeyCode)?與?Input.GetKeyDown()?的區別
所有類型的鍵盤輸入
主要用途
-
檢測按鍵事件:
- 使用?
Input.GetKeyDown(KeyCode)
?方法可以檢測用戶是否按下特定的鍵。例如,Input.GetKeyDown(KeyCode.Space)
?可以檢測空格鍵是否被按下。 - 在?
Event
?類中,Event.keyCode
?返回鍵盤事件的原始鍵代碼,這些鍵代碼直接映射到物理鍵盤鍵。
- 使用?
-
處理鍵盤輸入:
在?
OnGUI
?方法中,可以通過?Event.current.keyCode
?獲取當前按鍵的?KeyCode
?值,并進行相應的處理。
基本鍵位?
-
常用鍵:
KeyCode.Backspace
:退格鍵?KeyCode.Delete
:刪除鍵?KeyCode.Tab
:Tab鍵?KeyCode.Clear
:清除鍵?KeyCode.Return
:回車鍵?KeyCode.Pause
:暫停鍵?KeyCode.Escape
:Esc鍵?KeyCode.Space
:空格鍵?
-
字母鍵:
KeyCode.A
?到?KeyCode.Z
:字母鍵A到Z? -
數字鍵:
KeyCode.Alpha0
?到?KeyCode.Alpha9
:主鍵盤上的數字鍵0到9?KeyCode.Keypad0
?到?KeyCode.Keypad9
:數字鍵盤上的數字鍵0到9?
-
功能鍵:
KeyCode.F1
?到?KeyCode.F12
:功能鍵F1到F12? -
方向鍵:
KeyCode.UpArrow
:上箭頭鍵?KeyCode.DownArrow
:下箭頭鍵?KeyCode.LeftArrow
:左箭頭鍵?KeyCode.RightArrow
:右箭頭鍵?
-
控制鍵:
KeyCode.LeftControl
:左Ctrl鍵?KeyCode.RightControl
:右Ctrl鍵?KeyCode.LeftShift
:左Shift鍵?KeyCode.RightShift
:右Shift鍵?KeyCode.LeftAlt
:左Alt鍵?KeyCode.RightAlt
:右Alt鍵?
-
鼠標鍵:
KeyCode.Mouse0
:鼠標左鍵?KeyCode.Mouse1
:鼠標右鍵?KeyCode.Mouse2
:鼠標中鍵?
-
其他特殊鍵:
KeyCode.Insert
:插入鍵?KeyCode.Home
:Home鍵?KeyCode.End
:End鍵?KeyCode.PageUp
:Page Up鍵?KeyCode.PageDown
:Page Down鍵?
??代碼示例
按下與抬起空格
using system;
using UnityEngine;
public class ctrl_cv :MonoBehaviour //假設我的類名叫做ctrl_cv,即我的腳本scripts名稱
{void Start{//只調用一幀}void Update{//每一幀都調用if(Input.GetKeyDown(KeyCode.Space)){Debug.Log("按下空格")}if(Input.GetKeyUp(KeyCode.Space)){Debug.Log("抬起空格")}if(Input.GetButtonDown("Jump")){Debug.Log("跳躍") //跳躍鍵默認為Space空格鍵,Unity中可在偏好設置中調節}}
}
?檢測方向鍵來移動游戲對象
using UnityEngine;public class MoveWithArrowKeys : MonoBehaviour
{public float speed = 5f;void Update(){Vector3 move = Vector3.zero;// 使用方向鍵移動游戲對象if (Input.GetKey(KeyCode.UpArrow)){move += Vector3.forward;}if (Input.GetKey(KeyCode.DownArrow)){move += Vector3.back;}if (Input.GetKey(KeyCode.LeftArrow)){move += Vector3.left;}if (Input.GetKey(KeyCode.RightArrow)){move += Vector3.right;}transform.Translate(move * speed * Time.deltaTime);}
}
同時檢測多個鍵
using UnityEngine;public class MultiKeyInputExample : MonoBehaviour
{void Update(){// 檢測玩家是否同時按下了 "A" 鍵和 "D" 鍵if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.D)){Debug.Log("同時按下了 A 和 D 鍵");}}
}
暫停和恢復
using UnityEngine;public class PauseGameExample : MonoBehaviour
{private bool isPaused = false;void Update(){// 按下 Esc 鍵暫停或恢復游戲if (Input.GetKeyDown(KeyCode.Escape)){isPaused = !isPaused;Time.timeScale = isPaused ? 0 : 1;Debug.Log(isPaused ? "游戲已暫停" : "游戲已恢復");}}
}
通過數字鍵切換武器
using UnityEngine;public class WeaponSwitchExample : MonoBehaviour
{public GameObject[] weapons;void Update(){// 按下數字鍵 1 到 3 切換武器if (Input.GetKeyDown(KeyCode.Alpha1)){SwitchWeapon(0);}if (Input.GetKeyDown(KeyCode.Alpha2)){SwitchWeapon(1);}if (Input.GetKeyDown(KeyCode.Alpha3)){SwitchWeapon(2);}}void SwitchWeapon(int index){for (int i = 0; i < weapons.Length; i++){weapons[i].SetActive(i == index);}Debug.Log($"切換到武器 {index + 1}");}
}
注意事項
KeyCode
?值直接映射到物理鍵盤鍵,因此在不同平臺和語言設置下,這些鍵碼可能會有所不同。- 如果需要處理光標鍵、功能鍵等特殊按鍵,可以使用?
Event.keyCode
?來獲取相應的?KeyCode
?值。通過使用?
KeyCode
,開發者可以方便地處理鍵盤輸入事件,從而實現各種交互功能。
在不同操作系統(如Windows、MacOS、Linux)上的差異
在Unity中,KeyCode
值用于表示鍵盤上的物理按鍵。然而,在不同操作系統(如Windows、MacOS、Linux)上,這些鍵的識別和映射可能會有所不同。
修飾鍵的差異:在macOS上,某些修飾鍵可能無法通過
Event.current.keyCode
來識別。這表明在macOS上使用keyCode
時需要特別注意修飾鍵的處理方式。控制鍵的統一性:盡管在不同的操作系統中,控制鍵的功能有所不同,但在Unity中,它被統一為
KeyCode control
,分別代表Windows和Linux上的Control鍵以及macOS上的Command鍵。Alt鍵的差異:在macOS上,Alt鍵被稱為Option鍵,因此在編寫跨平臺代碼時需要注意這一點。
字符與鍵碼的區別:
keyCode
表示的是物理按鍵,而character
屬性則表示特定字符的輸入。例如,在小寫和大寫字母的情況下,它們都返回相同的keyCode
值(即(KeyCode.A),但字符本身會有所不同。
處理特殊鍵(如Ctrl、Alt、Shift)的事件
1、在Unity中處理特殊鍵(如Ctrl、Alt、Shift)的事件,可以使用
Input.GetKey
方法。這個方法可以檢測某個鍵是否被一直按住。例如,如果你想檢測用戶是否一直按住Ctrl鍵,你可以這樣寫:if (Input.GetKey(KeyCode.Ctrl)) {// Ctrl鍵一直被按住時執行的代碼 }
2、然而,對于特殊組合鍵(如Ctrl+Shift),你可能需要同時檢查多個鍵的狀態。這可以通過組合使用
Input.GetKey
來實現,例如:if (Input.GetKey(KeyCode.Ctrl) && Input.GetKey(KeyCode.Shift)) {// Ctrl和Shift鍵同時被按住時執行的代碼 }
?Input.GetKeyDown(KeyCode)
?與?Input.GetKeyDown()
?的區別
Unity的?Input.GetKeyDown(KeyCode)
?方法與?Input.GetKeyDown()
?方法之間的區別主要在于它們對按鍵事件的響應方式。
Input.GetKeyDown(KeyCode)?:這個方法用于檢測特定按鍵是否被按下一次。當按鍵被按下時,該方法會返回 true,但只在按鍵被按下的那一幀內有效。即使按鍵一直保持按下狀態,該方法也不會再次觸發。例如,在射擊游戲中,當你按下空格鍵開槍時,
Input.GetKeyDown(KeyCode.Space)
?只會在你第一次按下空格鍵時返回 true,而不會在你繼續按住空格鍵時持續返回 true。Input.GetKeyDown()?:這個方法沒有提供具體的參數,因此它實際上是一個語法錯誤或不存在的方法。在 Unity 中,正確的用法應該是?
Input.GetKeyDown(KeyCode)
,其中 KeyCode 是一個枚舉值,代表鍵盤上的某個按鍵。
所有類型的鍵盤輸入
Unity中的?KeyCode
?并不直接支持所有類型的鍵盤輸入,包括觸摸屏和游戲手柄。然而,Unity提供了多種機制來處理不同類型的輸入設備。
鍵盤輸入:Unity原生支持鍵盤輸入,并且可以通過?
KeyCode
?來識別不同的按鍵。游戲手柄和操縱桿輸入:Unity也支持游戲手柄和操縱桿輸入。開發者可以在輸入管理器 (Input Manager) 中創建虛擬軸和按鈕,并通過腳本訪問這些設置。
觸摸屏輸入:對于移動設備,Unity可以跟蹤最多五根手指同時觸摸屏幕的狀態。開發者可以通過訪問?
Input.touches
?屬性數組來獲取觸摸狀態。此外,Unity還提供了一個名為?Input-touchSupported
?的屬性,用于確定當前設備是否支持觸摸輸入。多平臺適配:在進行多平臺適配時,Unity的 InputSystem 插件可以幫助開發者在PC端(鼠標與鍵盤)、手機端(觸摸屏)以及主機手柄上同步實現角色移動與跳躍功能。