如何在C# Unity中使用switch知道按下了什么键

问题描述 投票:0回答:4

尝试使用 Switch 来了解使用 C# 和 Visual Studio 在 Unity 上按下的键,但它对我不起作用。 这是我的发言

switch (Input.GetKeyDown)
    {
        case (KeyCode.UpArrow):
            Debug.Log("Up Arrow key was pressed");
            break;
        case (KeyCode.DownArrow):
            Debug.Log("Down Arrow key was pressed");
            break;
        case (KeyCode.KeypadEnter):
            Debug.Log("Enter key was pressed");
            break;
    }
c# unity-game-engine switch-statement
4个回答
3
投票

接受的答案效率很低。

你们都使用 reflection 约每秒 60 次,并循环遍历大量不需要循环的内容,只是为了使用

switch case
而不是
if

检查输入的方式应该是:

if (Input.GetKeyDown(KeyCode.ArrowUp)) {
    Debug.Log("Up Arrow clicked");
}
if (Input.GetKeyDown(KeyCode.ArrowDown)) {
   Debug.Log("Up down clicked");
}
if (Input.GetKeyDown(KeyCode.KeypadEnter)) {
   Debug.Log("Enter clicked");
}

1
投票

您可以使用

System.Enum.GetValues()

迭代所有输入
 (using System.Linq;)

void Update() {
    var allKeys = System.Enum.GetValues(typeof(KeyCode)).Cast<KeyCode>();
    foreach (var key in allKeys) {
        if (Input.GetKeyDown(key)) {
            Debug.Log(key + " was pressed.");
        }
    }
}

至于 switch 语句,如果您正在搜索特定输入,这是不可能的,也不值得。
最好只使用

if-else
语句。


0
投票

我想这就是您要找的东西?这会获取单击的键的值,但是您必须调试日志 inputValue 以了解即将发生的情况,您不能在下面使用 KeyCode.UpArrow,这可能是您可以使用 switch 与输入的唯一方法。

    var inputValue = Input.inputString;
    switch(inputValue) {
    case ("1"):
        Debug.Log("1 key was pressed");
        break;
    case ("2"):
        Debug.Log("2 key was pressed");
        break;
    case ("3"):
        Debug.Log("3 key was pressed");
        break;
}

0
投票

我会这样做:

void Update()
{
   if (Input.anyKeyDown)
   {
       if (Input.GetKeyDown(KeyCode.Up)
          Debug.Log("Up Arrow key was pressed");
       else if (Input.GetKeyDown(KeyCode.Right)
          Debug.Log("Right Arrow key was pressed");
       else if (Input.GetKeyDown(KeyCode.Down)
          Debug.Log("Down Arrow key was pressed");
       else if (Input.GetKeyDown(KeyCode.Left)
          Debug.Log("Left Arrow key was pressed");
    }
}

也许你想要一堆 if 而不是“else if”

或者你可以探索一种方法来完成这项工作:

void OnGUI()
{
    var input = Event.current;
    switch (input.keyCode)
    {
        case KeyCode.Up:
            Debug.Log("Up Arrow key was pressed");
            break;
        case KeyCode.Right:
            Debug.Log("Right Arrow key was pressed");
            break;
        case KeyCode.Down:
            Debug.Log("Down Arrow key was pressed");
            break;
        case KeyCode.Left:
            Debug.Log("Left Arrow key was pressed");
            break;
     }

但根据我的经验,它会出现故障,当然有一种方法可以正确执行此操作,但我项目中的这段代码并不稳定,因为当您按一次键时它会运行多次。

© www.soinside.com 2019 - 2024. All rights reserved.