尝试使用 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;
}
接受的答案效率很低。
你们都使用 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");
}
您可以使用
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
语句。
我想这就是您要找的东西?这会获取单击的键的值,但是您必须调试日志 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;
}
我会这样做:
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;
}
但根据我的经验,它会出现故障,当然有一种方法可以正确执行此操作,但我项目中的这段代码并不稳定,因为当您按一次键时它会运行多次。