试图弄清楚if语句和GetKeyDown函数

时间:2019-07-18 17:06:34

标签: c# unity3d

即使条件不成立,我的if语句也会运行。变量已经在第一个循环中更改过,但是由于getkeydown事件,它会不断循环4次

仅介绍一下我正在Unity中使用C#进行创建,并且与其他按帧运行的进程不同,因此每个帧将再次运行代码。 所以基本上我正在验证用户是否通过了一种情况,否则,代码将输入if语句并为数组索引(situacao [8])提供新值,我的问题是由于GetKeyDown它将运行4次,直到框架更新(或所以我读另一篇文章)。 这应该很简单,因为我将值更改为1,因此不应再次在if中输入。

if (Input.GetKeyDown(KeyCode.Space))
{
    meuEstado = estado.Cela;
}
else if (Input.GetKeyDown(KeyCode.G))
{
    print(situacao[8]);
    texto.text = "He look for the Window.";
    if (situacao[8] != 1)
    {
        texto.text += "\nand notice there is a bird there!";
        situacao[8] = 1;
    }
}

打印输出为0 - 1 - 1 - 1,但应仅给出0。它没有显示任何控制台错误。


问题发现:

我有4个文本框与同一个脚本相关联,所有这些文本框也是变量分配的。

解决方案:

只需将脚本添加到一个对象并在其中关联其他对象

1 个答案:

答案 0 :(得分:3)

在打印之前,请检查该值是否为1,因此它将始终打印situacao[8]的当前值,该值是第一次打印0,然后每次打印1。

如果只希望在situacao[8]不为1时打印,请考虑将其移至if语句中,如下所示:

else if (Input.GetKeyDown(KeyCode.G))
{
    texto.text = "He look for the Window.";
    if (situacao[8] != 1)
    {
        print(situacao[8]);
        texto.text += "\nand notice there is a bird there!";
        situacao[8] = 1;
    }
}

在仅一个游戏对象而不是4个脚本上包含此脚本,将导致第一次按下仅打印“ 0”,而不再按下。