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组件,其中一些函数的解释在这里:

  • Event
  • EventModifiers

但是没有任何疑问的,ctrl + R 仍未检测成功。且这个方法在测试的时候只能检测到部分的按键。这时我才猛然发觉可能是因为按键冲突。果然,在进行打包后,CTRL+ R 可以正常被检测到。同样的,我最开始的构思也是正确的。也能够被检测到;

 

(PS:在我查询的过程中,我还找到了一种方法,可以通过检测 InputString 的方式进行判断,但是当时因为还未发觉unity按键冲突的问题,所以被我给删了。有兴趣的童鞋可以试一下啊~)

你可能感兴趣的:(Unity菜鸡互啄)