C# 我能';不要让相互排斥的按键工作

C# 我能';不要让相互排斥的按键工作,c#,unity3d,C#,Unity3d,我正在尝试编写一个if-else语句,这样即使在Udemy上的一节课中按下多个键时,也只需按一个按钮即可登录到控制台。然而,我已经三次检查了我的代码,以确保它的正确和多个按钮仍将同时登录到控制台 using System.Collections; using System.Collections.Generic; using UnityEngine; public class NumberWizard : MonoBehaviour { // Start is called befor

我正在尝试编写一个if-else语句,这样即使在Udemy上的一节课中按下多个键时,也只需按一个按钮即可登录到控制台。然而,我已经三次检查了我的代码,以确保它的正确和多个按钮仍将同时登录到控制台

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NumberWizard : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int maximum = 1000;
        int minimum = 1;

        Debug.Log("Welcome to Number Wizard!");
        Debug.Log("Please pick a Number");
        Debug.Log("The highest number is: " + maximum);
        Debug.Log("The lowest nuumber is 1: " + minimum);
        Debug.Log("Tell me if your number is higher or lower than 500");
        Debug.Log("Push up = higher, Push down = lower, enter = correct");
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Debug.Log("Up Arrow key was pressed.");
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Debug.Log("Down Arrow key was pressed.");
        }
        else if (Input.GetKeyDown(KeyCode.Return))
        {
            Debug.Log("Enter key was pressed.");
        }
    }
}

Input.GetKeyDown
将检查在该特定帧中按下的键。它不在乎是否有其他人同时被按下。与其说它是一种条件,不如说它是一种“触发器”

如果你想要排他性,我个人会选择以下方式:

private KeyCode keyPressed = KeyCode.None;
void Update()
{
    if ( keyPressed == KeyCode.None )
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            Debug.Log("Up Arrow key was pressed.");
            keyPressed = KeyCode.UpArrow;
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            Debug.Log("Down Arrow key was pressed.");
            keyPressed = KeyCode.DownArrow;
        }
        else if (Input.GetKeyDown(KeyCode.Return))
        {
            Debug.Log("Enter key was pressed.");
            keyPressed = KeyCode.Return;
        }
    }
    else
    {
        if (keyPressed == KeyCode.UpArrow && Input.GetKeyUp(KeyCode.UpArrow))
        {
            Debug.Log("Up Arrow key was pressed.");
            keyPressed = KeyCode.None;
        }
        else if (keyPressed == KeyCode.DownArrow && Input.GetKeyUp(KeyCode.DownArrow))
        {
            Debug.Log("Down Arrow key was pressed.");
            keyPressed = KeyCode.None;
        }
        else if (keyPressed == KeyCode.Return && Input.GetKeyUp(KeyCode.Return))
        {
            Debug.Log("Enter key was pressed.");
            keyPressed = KeyCode.None;
        }
    }
}
这是一个毫无意义的解决方案,但是如果你检查了很多钥匙,可能会变得很麻烦