Unity C#代码疑问:!gameOver逻辑与死亡后禁跳实现解析
Unity中!gameOver的逻辑与禁跳功能解析
1. !运算符的核心作用
!是布尔类型的逻辑非运算符,作用是翻转变量的布尔状态:
- 当
gameOver = false时,!gameOver等价于true - 当
gameOver = true时,!gameOver等价于false
你之前对条件的理解完全反了,原代码的if条件实际是:只有同时满足「按下空格键」「玩家在地面」「游戏未结束(gameOver为false)」三个要求,才会执行跳跃逻辑。
2. 为什么用!gameOver而非gameOver != true
这是编程里的惯用简洁写法,原因有三点:
- 更简洁:少写了
!= true,减少冗余字符 - 语义更直观:直接表达“游戏未结束”的含义,和自然语言逻辑更贴合
- 代码风格更干净:布尔变量本身就是真假值,没必要多一步和
true的比较操作
3. 代码如何实现死亡后禁跳
这段代码的逻辑链很清晰:
- 初始状态
gameOver = false,此时!gameOver为true,只要满足「按空格+在地面」,就能触发跳跃 - 当玩家碰撞障碍物死亡时,你需要在碰撞处理代码(比如
OnCollisionEnter方法)里把gameOver设为true - 一旦
gameOver = true,!gameOver就变成false,整个if条件不成立,跳跃代码块再也不会执行,自然就实现了死亡后禁止跳跃的效果
附原代码:
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"); } }
内容的提问来源于stack exchange,提问作者Melih Ekici
相关产品推荐
相关产品推荐

