【Unity】輸入系統

1. Unity 的輸入系統函數

1.1  虛擬軸的輸入檢測
Unity默認定義了15個虛擬軸。
能夠經過Edit -> Project Settings -> Input 打開 InputManager 來查看定義好的虛擬軸
 
(1) 虛擬軸的屬性
Size以後的一些屬性,例如:Horizontal,Vertical。顧名思義這是水平方向和先後方向上的定義(針對於軸向在X軸上)。點擊 Horizontal旁邊的三角形,能夠看到其中定義了許多內容。例如:Name表示的是這個虛擬軸的名稱, Negative Button表示的是水平位置上負方向的按鈕(向左), Positive Button表示的是水平位置上正方向的按鈕(向右)。下兩個帶Alt的選項是備選方案。Gravity表明的是按鈕恢復到正常值的恢復速度,值越大越 快。Dead表示當對應按鈕的數值小於此處定義的數值時,都認爲按鈕已經復位。Axis項定義虛擬軸的方向,可使X軸Y軸或者其餘多位控件的軸。
 
(2) 調用Input.GetAxis方法來獲取虛擬軸的當前狀態值
虛擬軸中負方向和正方向的數值範圍時-1到1之間。例如:GetAxis("Horizontal"); 這時候若是按住left按鈕,此函數會返回-1 ,鬆開以後恢復到0。同樣的若是按住Right按鈕,此時函數會返回1。所以能夠認爲在-1到0之間是按了虛擬軸的負方向,在等於0時是什麼都沒有按,在 0到1之間是按了虛擬軸的正方向。所以能夠把這個值做爲transform或者rotation的值,來控制物體的移動和旋轉方向,也能夠控制物體的移動速度隨按鍵力度的變化等。
 
1.2 鼠標輸入檢測
對於鼠標的檢測。主要的是 Input 類中的  GetMouseButton GetMouseButtonDown /  GetMouseButtonUp,入參爲0/1/2,分別對應鼠標左鍵/右鍵/中鍵盤。返回值爲bool,表示該鍵是否處於該狀態。
例如,當按下鼠標左鍵的一瞬間,GetMouseButtonDown(0) 的返回值爲true。
GetMouseButtonDown()當鼠標按下時執行,但只會執行一次。GetMouseButton()當鼠標長按時,會一直執行。GetMouseButtonUp()是當鬆開鼠標時執行,且只會執行一次。
 
1.3 鍵盤輸入檢測
鍵盤的檢測,主要是 Input 類的  GetButtonDown / GetButton / GetButtonUp  GetKeyDown / GetKey / GetKeyUp 兩組。
GetButton 組方法的參數是虛擬軸的名稱,返回值爲 bool 類型,能夠檢測到該虛擬軸定義的按鍵狀態,如虛擬軸 "Horizontal" 中定義了lef/right/a/d 鍵,當這幾個鍵被按下時,GetButton("Horizontal") 返回true
GetKey 組方法的參數爲 string 或 Unity 定義的 枚舉類型KeyCode,例如當字母鍵A被按下時,GetKey(KeyCode.A) 以及 GetKey("A") 返回值都爲true
 
1.4 觸摸檢測
Unity 定義了枚舉類型TouchPhase
Touch.GetTouch(0).phase 返回最近一幀的觸摸狀態。
Input.toucheCount,觸摸持續幀數。
Touch.deltaPosition 最後一陣滑動的值,只返回xy座標,通常用vector2接收。
 
2. XGame遊戲的輸入管理系統
2.1 InputManager
InputManager 負責檢測底層設備輸入,派發輸入事件。
 
(1) 定義枚舉類型 InputState 表示當前的輸入
 
(2) 枚舉類型eTouchPhase表示 上一幀的輸入狀態
 
(3) 枚舉類型GestureEvent 表示斷定出的輸入事件
 
(4) 類InputEvent 表示輸入事件,包含了一個 GestureEvent 成員,具體的子類還定義了各自的數據字段,好比 TouchEvent 定義了觸摸點的座標等。
 
(5) InputManager 中定義一系列的代理類型,並定義了對應的事件
 
在 InputManager 的 Update() 方法中,調用GetTouchPhase得到上一幀的觸摸狀態(eTouchPhase),結合當前的輸入狀態(InputState),肯定並修改輸入狀態,並斷定輸入產生何種效果(GestureEvent),而後獲取相應的數據信息,填充 InputEvent,調用 RaiseEvent 派發事件,RaiseEvent的實現就是根據 參數的 GestureEvent 枚舉值,執行不一樣的代理方法。
 
2.2 InputDelegate
InputDelegate 負責管理當前的輸入模式,根據輸入模式往 InputManager 註冊當前模式下各類 InputEvent 的回調方法。
 
(1) 定義枚舉 InputModule 表示遊戲不一樣狀態下的輸入模式
 
(2) 定義方法 SubscribeHandlersAndEvents 來註冊輸入模式,以註冊相應的回調方法
 
(3) 相應的有UnsubscribeHandlersAndEvents 註銷回調
相關文章
相關標籤/搜索