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

Unity中如何在持续碰撞时维持协程运行以保持血条可见?

解决血条持续击中时保持可见的问题

你现在遇到的核心问题是:每次玩家被击中都会启动一个新的EnableAndDisableHealthBar协程,而之前启动的协程仍会按原逻辑执行关闭血条的操作——这就导致即使玩家还在持续被击中,旧协程到时间后还是会把血条关掉。咱们可以通过跟踪当前运行的协程实例+重置显示计时器的方式来解决这个问题。

具体修改步骤

1. 添加协程跟踪变量

先在你的脚本类里定义一个变量,用来保存当前正在运行的血条协程:

private Coroutine _activeHealthBarCoroutine;

2. 调整OnTriggerEnter的协程启动逻辑

每次被击中时,如果已有协程在运行,先停止它,再启动新的协程。这样就能重置血条的显示时长,避免旧协程触发不必要的关闭操作:

public void OnTriggerEnter(Collider obj) { 
    if (obj.tag == "EnemyBullets") { 
        Debug.Log("Player Plane hit by Enemy Bullet"); 
        planeCurrentLife--; 

        // 停止当前正在运行的血条协程(如果存在)
        if (_activeHealthBarCoroutine != null)
        {
            StopCoroutine(_activeHealthBarCoroutine);
        }
        // 启动新协程并保存引用
        _activeHealthBarCoroutine = StartCoroutine(EnableAndDisableHealthBar());

        if (planeCurrentLife <= 0) { 
            Destroy(obj.gameObject); 
            Explode(); 
        }
    } 
}

3. 优化协程逻辑(可选,让代码更清晰)

把生命值更新和血条显示时长控制拆分,让协程专注处理显示计时,血量变化单独用方法维护:

private void UpdateHealthBarVisual()
{
    fillAmt -= 0.05f;
    // 根据当前血量设置血条颜色
    if (fillAmt >= 0.6f) { 
        HealthBarFiller.color = Color.green; 
    } else if (fillAmt >= 0.3f) { 
        HealthBarFiller.color = Color.yellow; 
    } else { 
        HealthBarFiller.color = Color.red; 
    }
}

IEnumerator EnableAndDisableHealthBar() { 
    isHealthBarVisible = true; 
    showIsHealthBarVisible = true; 
    UpdateHealthBarVisual(); // 调用血量更新方法

    // 循环计时,直到时长耗尽
    float remainingTime = healthBarVisibilityTime;
    while (remainingTime > 0)
    {
        remainingTime -= Time.deltaTime;
        yield return null;
    }

    showIsHealthBarVisible = false; 
    isHealthBarVisible = false; 
    // 协程结束后清空引用
    _activeHealthBarCoroutine = null;
}

这样修改后,只要玩家持续被击中,旧的协程就会被终止,新协程会重新开始计时,血条就能一直保持可见;直到最后一次击中后,等待healthBarVisibilityTime时长才会自动关闭。

内容的提问来源于stack exchange,提问作者Aisha D.S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:12:01