Unity的Input類提供了許多監聽用戶輸入的方法,比如我們常見的鼠標,鍵盤,手柄等。我們可以用Input類的接口來獲取用戶的輸入信息
一、監聽鼠標輸入
GetMouseButtonUp 、GetMouseButtonDown、GetMouseButton
input.GetMouseButtonDown和 input.GetMouseButtonUp 能夠分別監聽鼠標的按下和松開事件,GetMouseButton長按響應,值得注意的是,這三個方法需要傳入參數,0表示左鍵,1表示右鍵,2表示中間鍵
比如我們可以在代碼中這樣寫,來監聽游戲中的鼠標點擊:
void Update(){/*鼠標輸入*/if (Input.GetMouseButtonDown(0)){Debug.Log("你按下了鼠標左鍵");}if (Input.GetMouseButton(0)){Debug.Log("你壓著鼠標左鍵不放");}if (Input.GetMouseButtonUp(0)){Debug.Log("你松開了鼠標左鍵");}if (Input.GetMouseButtonDown(1)){Debug.Log("你按下了鼠標右鍵");}if (Input.GetMouseButton(1)){Debug.Log("你壓著鼠標右鍵不放");}if (Input.GetMouseButtonUp(1)){Debug.Log("你松開了鼠標右鍵");}if (Input.GetMouseButtonDown(2)){Debug.Log("你按下了鼠標中鍵");}if (Input.GetMouseButton(2)){Debug.Log("你壓著鼠標中鍵不放");}if (Input.GetMouseButtonUp(2)){Debug.Log("你松開了鼠標中鍵");}}
mousePosition屏幕坐標
如果想獲取當前屏幕的坐標,可以用Input.mousePosition來訪問,它是一個vector3類型的變量, 比如這樣,我們就可以在鼠標點擊時獲取當前點擊的屏幕位置
void Update(){if (Input.GetMouseButtonDown(0)){Debug.Log("正在執行鼠標左鍵點擊");Vector3 MousePos = Input.mousePosition;Debug.Log("當前坐標:" + MousePos);}}
二、監聽鍵盤輸入
GetKeyUp,GetKeyDown,GetKey
和鼠標一樣,鍵盤也可以獲取它的按下,長按和抬起狀態。分別需要調用Input.GetKeyDown,Input.GetKey 和 Input.GetKeyUp 來實現
同時它需要傳入參數:KeyCode,下面是常見的KeyCode值:
-
KeyCode.A:A 鍵。
-
KeyCode.W:W 鍵。
-
KeyCode.S:S 鍵。
-
KeyCode.D:D 鍵。
-
KeyCode.Space:空格鍵。
-
KeyCode.Return:回車鍵。
-
KeyCode.Escape:Esc 鍵。
-
KeyCode.LeftShift:左 Shift 鍵。
-
KeyCode.RightShift:右 Shift 鍵。
-
KeyCode.LeftAlt:左 Alt 鍵。
-
KeyCode.RightAlt:右 Alt 鍵。
-
KeyCode.Tab:Tab 鍵。
代碼示例:
void Update(){/*鍵盤輸入*/if (Input.GetKey(KeyCode.Space)){Debug.Log("你壓著空格不放");}if (Input.GetKeyDown(KeyCode.Space)){Debug.Log("你按下了空格");}if (Input.GetKeyUp(KeyCode.Space)){Debug.Log("你松開了空格");}if (Input.GetKey(KeyCode.A)){Debug.Log("你壓著A不放");}if (Input.GetKeyDown(KeyCode.A)){Debug.Log("你按下了A");}if (Input.GetKeyUp(KeyCode.A)){Debug.Log("你松開了A");}}
我們學會了transform.translate方法,也學會了響應鍵盤的按鍵事件,那我們就可以寫出一個用WSAD鍵,控制物體前后左右移動的方法了
void Update(){float DisPreSec = 6f;if (Input.GetKey(KeyCode.W)){this.transform.Translate(0, 0, DisPreSec * Time.deltaTime);}if (Input.GetKey(KeyCode.S)){this.transform.Translate(0, 0, -DisPreSec * Time.deltaTime);}if (Input.GetKey(KeyCode.A)){this.transform.Translate(DisPreSec * Time.deltaTime, 0, 0);}if (Input.GetKey(KeyCode.D)){this.transform.Translate(-DisPreSec * Time.deltaTime, 0, 0);}}