提问人:Melih Ekici 提问时间:11/9/2023 更新时间:11/14/2023 访问量:79
C# 和 Unity 引擎
C# and the Unity Engine
问:
我正在尝试完成一个关于一些代码的教程视频,这些代码应该可以防止玩家在某个时候死亡后(当他们与障碍物相撞时)连续跳跃。我们在一开始就将 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");
}
}
答:
布尔变量前面的感叹号 (!) 用于否定其值。在本例中,代码 !gameOver 表示“不是 gameOver”。
因此,当条件 !gameOver 为 true 时,意味着 gameOver 为 false。这是因为 !false 的计算结果为 true,而 !true 的计算结果为 false。
谢谢。
变量左侧的感叹号表示“获取此布尔值的反义词”,如果变量为 true,则为 false,反之亦然。这不会更改变量本身的值。
此外,“if check”的逻辑似乎是,当游戏进行中并且玩家在地面上时,当播放按空格时,您希望播放跳跃动画,更改变换的位置,并使玩家离开地面,因此 !gameOver 应该是 true。
if (Input.GetKeyDown(KeyCode.Space) && isOnGround && gameOver != true)
{
// ...
}
gameOver != true
与!gameover
评论
!gameOver
表示与 或 完全相同。gameOver == false
gameOver != true