接收任何键盘输入并与Unity上的Switch语句一起使用

时间:2019-05-30 07:24:45

标签: c# unity3d

我不想使用if语句。为了简化和提高性能,我想使用切换用例并执行该方法。我希望所有键盘输入都能被检测到。但是,是否有任何方法可以传递任何按键信息? 我目前的方法是:

// Update is called once per frame
void Update()
{
    char a = Input.GetKey();//anything like this method?
    switch (a)
    {
        case 'a':
                //print'';
                break;
        case 'b':
                //print'';
                break;
        default:
            break;
    }

}

如何在没有if语句的情况下实现任何按键信息检测?

3 个答案:

答案 0 :(得分:1)

webdriver.get(response.url)

还可以缓存Enum.GetValues(typeof(KeyCode))的值以进行优化。

答案 1 :(得分:1)

我没有使用过Unity,但是,我了解您的问题,并且我是C#开发人员。

通过快速搜索,我在Unity论坛上找到了一个与您有类似问题的人。这是线程https://answers.unity.com/questions/1520939/check-if-there-is-a-keyboard-input.html

if (Input.anyKeyDown)
 {
     Event e = Event.current;
     if (e.isKey)
     {
         Debug.Log("Current Key is : " + e.keyCode.ToString());
     }
 }

上面的代码(来自Unity论坛链接)使您能够检测input.anyKeyDown(键盘和鼠标)。然后,您可以通过检查输入是否仅为带有e.isKey

的键盘输入来过滤鼠标检测

这里是KeyCode的文档。这还包括所有可用的属性(许多与键盘相关的属性,您可以对其进行检查)。

例如(未测试):

Event e = Event.current;
if (e.isKey)
{
    Debug.Log("Current Key is : " + e.keyCode.ToString());

    if(e.keyCode == KeyCode.A) //checks if the keycode returned equals the 'A' key
    {
         // Do something
    }
}

编辑:如其他答案所述,您可以尝试Input.inputString。根据文档insputString包含“仅ASCII字符”。因此,例如,如果您只是想检查字母,则可以在“更新”方法中执行类似的操作。

void Update()
{
    //get the input
    var input = Input.inputString;

    //ignore null input to avoid unnecessary computation
    if (!string.IsNullOrEmpty(input))
    {
        switch(input)
        {
            case 'a': break;
            case 'b': break;
        }
    }
}

希望这会有所帮助。

答案 2 :(得分:0)

最佳解决方案-使用Input.inputString

如果要将输入捕获为字符串,请使用Input.inputString。它将以字符串形式返回在该框中输入的键盘输入

如果您只想获取一个字符或字符串,这是最简单的方法。

void Update()
{
    //get the input
    var input = Input.inputString;
    //ignore null input to avoid unnecessary computation
    if (!string.IsNullOrEmpty(input))
        //logic related to the char pressed
        Debug.Log("Pressed char: " + Input.inputString);
}

其他解决方案

ForeachLoop 此foreach循环有效,但性能较差。它需要一个foreach循环,该循环每次都分配内存,并且必须检查所有可能的键。

在阅读this answer时,您还可以看到可以使用与Event System类似的方法使用相同的方法来创建接口。


OnGUI

您可以捕获Event.current(这是一个unityGUI Event),如this answer中所述,但是这样做您将依赖于OnGUI方法。这种方法的性能非常低。