處理用戶的shuru是游戲中必不可少的元素。Unity提供了一個非常強大易用的處理輸入信息的類 —— Input,它可以處理鼠標、鍵盤、遙感/方向盤/手柄等游戲外設的輸入信息,也可以處理 IOS/Android 等移動設備的觸摸輸入信息。Input Manager (輸入管理器)用于為項目定義各種不同的輸入軸和操作。開發人員可以通過編寫腳本接收輸入信息,完成與用戶的交互。
Input Manager(輸入管理器)
Input 類時處理輸入的接口,下面包含成員變量和函數的簡要介紹。
Input 類成員變量
成員變量 | 說明 |
---|---|
acceleration | 得到設備當前在三維空間中的線性加速度(只讀) |
accelerationEventCount | 得到上一幀的加速度參數數據長度 |
accelerationEvents | 得到上一幀的加速度數據列表(只讀)(分配臨時變量) |
anyKey | 是否有按鍵按下(只讀) |
anyKeyDown | 當有任意按鍵按下的第一幀返回true(只讀) |
compass | 羅盤屬性(僅支持手持設備)(只讀) |
comenstateSensors | 是否需要根據屏幕方向補償感應器 |
compositionCursorPos | 當前IME組合字符串的光標位置 |
compositionString | 用戶通過IME輸入的組合字符串 |
deviceOrientation | 操作系統提供的設備方向(只讀) |
gyro | 返回默認的陀螺儀 |
imeCompositionMode | 設置IME組合模式 |
imelsSelected | 當前是否啟用了IME輸入鍵盤 |
inputString | 得到當前幀的鍵盤輸入字符串(只讀) |
mousePosition | 鼠標位置的像素坐標(只讀) |
multiTouchEnabled | 系統是否支持多點觸摸 |
simulateMouseWithTouches | 屏幕觸控模擬鼠標的點擊 |
touchCount | 當前所有觸摸狀態列表長度(只讀) |
touches | 當前所有觸摸狀態列表(只讀)(分配臨時變量) |
touchSupported | 返回應用程序正在運行的設備是否支持觸摸輸入 |
Input 類成員函數
成員函數 | 說明 |
---|---|
GetAccelerationEvent | 返回指定的上一幀加速度測量數據(不分配臨時變量) |
GetAxis | 根據名稱得到虛擬輸入軸的值 |
GetAxisRaw | 根據名稱得到虛擬坐標軸的未使用平滑過濾的值 |
GetButton | 如果指定名稱的虛擬鍵被按下,那么期間持續返回 true |
GetButtonDown | 指定名稱的虛擬按鍵被按下的那一幀返回 true |
GetButtonUp | 指定名稱的虛擬按鍵被松開的那一幀返回 true |
GetJoystickNames | 返回當前連接的所有搖桿的名稱數組 |
GetKey | 當指定的按鍵被按下期間持續返回 true |
GetKeyDown | 當指定的按鍵被按下的那幀返回 true |
GetKeyUp | 當指定的按鍵被松開的那幀返回 true |
GetMouseButton | 指定的鼠標按鍵是否按下 |
GetMouseButtonDown | 指定的鼠標俺家松開的那一幀返回 true |
GetMouseButtonUp | 指定的鼠標按鍵松開的那一幀返回 true |
GetTouch | 返回指定的觸摸數據對象(不分配臨時變量) |
IsJoystickPreconfigured | 配置默認的搖桿輸出(只限Linux) |
ResetInputAxes | 重置所有輸入,調用該方法后所有方向軸和按鍵的數值都變為 0 |
Key 和 Button 的區別:
在Input類中,Key與物理按鍵對應,例如鍵盤、鼠標、搖桿上的按鍵,其映射關系無法改變,可以通過按鍵名稱或者按鍵編碼KeyCode來獲取其輸入狀態。例如GetKeyDown(KeyCode.A)會在按下鍵盤 “A”鍵時返回true。
而Button 是輸入管理器 Input Manager 中定義的虛擬按鍵,通過名稱來訪問。開發者可以根據需要創建和命名虛擬按鍵,并設置與物理按鍵(及其組合)的消息映射。依次選擇菜單欄中的 Edit -> Project Settings -> Input 命令,即可打開輸入管理器。
Key 不可改變,Button可以靈活的配置輸入,并且可以讓玩家來自定義鍵位輸入,因此在開發中推薦使用虛擬按鍵。
輸入軸Axis:
輸入軸Axis用來模擬平滑變化的輸入,例如搖桿的變化、方向盤的轉動等,需要在輸入管理器中進行配置。它包含政府兩個虛擬按鍵(Positive Button 和 Negative Button)。可以吧一個輸入軸想象成一個滑動條,左邊取值 -1,右邊取值為 1。當按下按鍵時,數值會逐漸從 0 向一端變化,實現漸變的效果,而不會顯得突兀。(例如汽車啟動)
鼠標輸入
(1)鼠標相應事件示例:
void Update() {
if(Input.GetMouseButton(0)) {//左鍵按下
print("鼠標左鍵按下");
}
if(Input.GetMouseButtonDown(1)) {//右鍵按下
print("鼠標右鍵按下");
}
if(Input.GetMouseButtonUp(2)) {//中鍵抬起
print("鼠標中鍵抬起");
print("鼠標當前位置:" + Input.mousePosition);
}
}
(2)鼠標控制物體旋轉:
void Update() {
float horizontalSpeed = 2.0f;
float verticalSpeed = 2.0f;
float h = horizontalSpeed * Input.GetAxis ("Mouse X");
float v = verticalSpeed * Input.GetAxis ("Mouse Y");
transform.Rotate (v, h, 0);
}