GetKeyDown行为怪异,Unity,C#

本文关键字:Unity GetKeyDown | 更新日期: 2023-09-27 18:01:01

我在Unity中的GetKeyDown有问题。即使日志似乎在每次按下按钮时都能检测到,但它并不总是执行代码。快速按下按钮时似乎会发生更多情况。我想要的是减少"计数"直到零,然后在x秒后重新填充到其初始值。

int counting = 5;
void Update(){
    if(Input.GetKeyDown(KeyCode.O) && counting > 0){
        counting --;
    }
    else if(counting <= 0)
    {
        Invoke ("ResetCounting",3);
    }
    print (counting);
}
void ResetCounting ()
{
    counting = 5;
}

GetKeyDown行为怪异,Unity,C#

如果在counting已经是0的情况下继续敲击该键,则会多次触发ResetCounting()。当counting被重置为5时,队列中仍然有一些对ResetCounting()的调用,并且将重置counting,同时它仍然大于0

您需要添加一个检查,以确保ResetCounting()只触发一次。

int counting = 5;
bool invokedReset = false;
void Update(){
    if(Input.GetKeyDown(KeyCode.O) && counting > 0){
        counting --;
    }
    else if(counting <= 0 && !invokedReset)
    {
        Invoke ("ResetCounting",3);
        invokedReset = true;
    }
    print (counting);
}
void ResetCounting ()
{
    counting = 5;
    invokedReset = false;
}