1. 程式人生 > >Unity 檢測多鍵值的輸入

Unity 檢測多鍵值的輸入

最近由於一個針對攝象頭的復位的需要,涉及到了組合鍵的檢測,在探索的過程中遇到了一些容易忽視的問題,因此在這記錄一下,以免日後忘記;

在最開始的構思階段的時候,我本能的想到了這個方法:

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按鍵衝突的問題,所以被我給刪了。有興趣的童鞋可以試一下啊~)