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