You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:当前生命值为0时游戏结束界面无法显示的问题

解决Unity生命值系统中Game Over界面不显示的问题

问题根源

  1. GameOver()方法从未被调用:你定义了该方法,但代码中没有任何地方触发它,哪怕生命值归0,这个方法也不会自动执行。
  2. 判断条件不严谨:仅判断currentHealth == 0,如果某次伤害让生命值直接变为负数(比如当前15点血,受到20点伤害),就无法触发Game Over界面。

修正方案

方案1:在扣血时直接检查并触发Game Over

修改TakeDamage方法,每次扣血后立即校验生命值状态,同时限制生命值最低为0:

void TakeDamage(int damage)
{
    currentHealth -= damage;
    // 防止生命值低于0
    currentHealth = Mathf.Max(currentHealth, 0);
    healthBar.SetHealth(currentHealth);

    // 检查是否触发死亡逻辑
    if (currentHealth <= 0)
    {
        gameOver.SetActive(true);
        // 可选:添加禁用玩家输入、暂停游戏等逻辑
        // GetComponent<PlayerInput>().enabled = false;
        // Time.timeScale = 0;
    }
}

方案2:保留独立的GameOver()方法并主动调用

如果你希望保留单独的死亡检查方法,可在扣血后主动调用它,同时修改判断条件:

void TakeDamage(int damage)
{
    currentHealth -= damage;
    currentHealth = Mathf.Max(currentHealth, 0);
    healthBar.SetHealth(currentHealth);
    GameOver(); // 调用死亡检查
}

public void GameOver()
{
    if (currentHealth <= 0)
    {
        gameOver.SetActive(true);
    }
}

额外检查项

  • 确保在Unity编辑器的Inspector面板中,gameOver变量已拖拽绑定对应的UI对象,否则SetActive(true)不会产生任何效果。
  • 若OnDamage方法会因按键重复触发导致多次扣血,可添加冷却逻辑避免单次按键造成多次伤害。

内容的提问来源于stack exchange,提问作者user19401177

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:45:54