Unity 檢測多鍵值的輸入
阿新 • • 發佈:2018-12-22
最近由於一個針對攝象頭的復位的需要,涉及到了組合鍵的檢測,在探索的過程中遇到了一些容易忽視的問題,因此在這記錄一下,以免日後忘記;
在最開始的構思階段的時候,我本能的想到了這個方法:
if(Input.GetKey(KeyCode.LeftControl) && Input.GetKey(KeyCode.R))
{
//TODO : 功能模組
Debug.Log("IN");
}
但是當時試驗的時候,並未打包釋出,而是直接在unity中進行的。因此,該程式碼並未起作用。
又在各個網站上搜索後,又得到了如下的方案:
private void OnGUI() { //檢測輸入事件 if (Event.current.rawType == EventType.KeyDown) { EventCallBack(Event.current); } } private void EventCallBack(Event e) { bool eventDown = (e.modifiers & EventModifiers.Control) != 0; if (!eventDown) { return; } //僅需檢測單個鍵值時使用 if (e.keyCode == KeyCode.R) { //TODO : 功能模組 Debug.Log("IN"); } //修檢測多個值時使用 //switch (e.keyCode) //{ // case KeyCode.UpArrow: // Debug.Log("按下組合鍵:ctrl+↑"); // break; // case KeyCode.DownArrow: // Debug.Log("按下組合鍵:ctrl+↓"); // break; // case KeyCode.LeftArrow: // Debug.Log("按下組合鍵:ctrl+←"); // break; // case KeyCode.RightArrow: // Debug.Log("按下組合鍵:ctrl+→"); // break; //} }
這個方法使用的是unity中的Event元件,其中一些函式的解釋在這裡:
但是沒有任何疑問的,ctrl + R 仍未檢測成功。且這個方法在測試的時候只能檢測到部分的按鍵。這時我才猛然發覺可能是因為按鍵衝突。果然,在進行打包後,CTRL+ R 可以正常被檢測到。同樣的,我最開始的構思也是正確的。也能夠被檢測到;
(PS:在我查詢的過程中,我還找到了一種方法,可以通過檢測 InputString 的方式進行判斷,但是當時因為還未發覺unity按鍵衝突的問題,所以被我給刪了。有興趣的童鞋可以試一下啊~)