循环中的C#切换布尔值/ Update()中的Unity切换布尔值

时间:2017-12-01 21:58:16

标签: c# unity3d boolean toggle

标题看起来可能看起来不确定,但它是一回事,在谈论Unity引擎时,它的解释不同,以防任何Unity兽医要查看我的帖子。

在Unity引擎中,某些方法在一个类中执行特定任务,其中一个是Update()方法,它为每一帧循环(因此标题中的循环表达式)。

我的想法是,我将在此循环中有一个表达式,等待用户单击一个键,这将依次切换一个布尔变量。 我试图以多种不同的方式实现这一点,但我现在的做法似乎是最有希望的。

if (Input.GetKeyDown(KeyCode.Delete))
{
    if (this.modGodspeed)
    {
        this.speedMult = 1f;
        this.godSpeedToggled = "OFF";
        this.modGodspeed = false;
    }
    if (!this.modGodspeed)
    {
        this.speedMult = 5f;
        this.godSpeedToggled = "ON";
        this.modGodspeed = true;
    }
}

在启动过程中,boolean初始化为false,默认情况下显示为OFF,当我单击删除键时,第一部分工作,并显示ON和{{ 1}}变量设置为5.问题是它不会再次关闭。再次单击“删除”不会执行任何操作。

代码说明:

speedMult = Unity库的一部分,读取键输入。

Input.GetKeyDown(Keycode.Delete) =布尔我正在谈论。

modGodSpeed =要切换的Speedmultiplier。

speedMult =字符串变量,向用户显示是否切换了神速。

1 个答案:

答案 0 :(得分:3)

您的代码正是您所写的内容。

这就是发生的事情:

1 if (this.modGodspeed)将执行并将modGodspeed设置为false

<强> 2 即可。它下面的if (!this.modGodspeed)将在同一帧中执行,并将modGodspeed设置为true

3 。当您再次按下删除键(KeyCode.Delete)时,这将重复。

如果执行第一个if语句,则

#2 不应执行。您需要将if语句仅检查一次,以便modGodspeed变量为true时,其下方的另一个if语句赢了再次检查。这就是ifelse ifelse语句的原因。

在第二个if声明中使用其他if

if (this.modGodspeed)
{
    ....
}
else if (!this.modGodspeed)
{
    ...
}

或者只是使用else语句,因为modGodspeed变量是一个布尔变量,可以是truefalse

if (this.modGodspeed)
{
    ....
}
else
{
    ....
}