C# 和 Unity 引擎

C# and the Unity Engine

提问人:Melih Ekici 提问时间:11/9/2023 更新时间:11/14/2023 访问量:79

问:

我正在尝试完成一个关于一些代码的教程视频,这些代码应该可以防止玩家在某个时候死亡后(当他们与障碍物相撞时)连续跳跃。我们在一开始就将 gameOver 分配给了 false。gameOver难道不是真的吗?所以这段代码不会说[如果我们按'空格'和如果玩家在地上,如果gameOver布尔值为真,那么当游戏结束时]

问题是,我不明白在一开始就分配给“false”的布尔值上加上感叹号以使其“false”的想法。 此外,导师更喜欢在布尔值的左侧放置感叹号 (!gameOver) 的方式。他不喜欢这样写:if (Input.GetKeyDown(KeyCode.Space) && isOnGround && gameOver != true)

导师的目标是防止玩家死后继续跳跃。我真的不明白怎么回事 这个 (!gameOver) 有效。他的代码:

public bool gameOver = false;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && isOnGround && !gameOver)
        {
            playerRb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
            isOnGround = false;

            playerAnim.SetTrigger("Jump_trig");
        }
    }
C# unity-游戏引擎 visual-studio-2010

评论

1赞 Morion 11/9/2023
!gameOver表示与 或 完全相同。gameOver == falsegameOver != true

答:

4赞 PYGURUDEV 11/9/2023 #1

布尔变量前面的感叹号 (!) 用于否定其值。在本例中,代码 !gameOver 表示“不是 gameOver”。

因此,当条件 !gameOver 为 true 时,意味着 gameOver 为 false。这是因为 !false 的计算结果为 true,而 !true 的计算结果为 false。

谢谢。

0赞 Austin Yang 11/9/2023 #2

变量左侧的感叹号表示“获取此布尔值的反义词”,如果变量为 true,则为 false,反之亦然。这不会更改变量本身的值。

此外,“if check”的逻辑似乎是,当游戏进行中并且玩家在地面上时,当播放按空格时,您希望播放跳跃动画,更改变换的位置,并使玩家离开地面,因此 !gameOver 应该是 true。

0赞 user22887125 11/9/2023 #3
if (Input.GetKeyDown(KeyCode.Space) && isOnGround && gameOver != true)
{
  // ...
}

gameOver != true!gameover