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

Unity C#中使用Coroutine实现2分钟倒计时的异常问题求助

问题分析与修复

你的倒计时出现异常的核心原因有三点:

  • 初始变量设置错误:要实现2分钟倒计时,初始minutes应设为2而非1,seconds初始值应为0(对应初始显示的"2:00")
  • 倒计时逻辑顺序颠倒:原代码先减少秒数再更新UI,导致初始显示的"2:00"会立刻被替换成错误数值
  • 缺少循环终止条件:倒计时结束后协程仍会继续运行,导致minutes变成负数,引发显示异常

修复后的代码

private int seconds;
private int minutes = 2; // 修正初始分钟数为2

void Start()
{
    seconds = 0; // 修正初始秒数为0,对应2:00的初始显示
    timer.text = $"{minutes}:0{seconds}";
    StartCoroutine(CountSeconds());
}

IEnumerator CountSeconds() 
{
    // 仅当分钟或秒数大于0时继续循环
    while (minutes > 0 || seconds > 0) 
    {
        // 先等待1秒,再更新倒计时数值,保证初始显示的"2:00"能维持1秒
        yield return new WaitForSeconds(1f); 

        seconds--;
        if (seconds < 0)
        {
            seconds = 59;
            minutes--;
        }

        // 统一处理秒数补零逻辑,简化代码
        timer.text = $"{minutes}:{(seconds >= 10 ? seconds.ToString() : $"0{seconds}")}";
    }

    // 可选:倒计时结束后的提示
    timer.text = "Time's Up!";
}

关键修改说明

  1. 初始值修正:将minutes设为2、seconds设为0,与初始显示的"2:00"完全匹配
  2. 逻辑顺序调整:先执行等待再更新数值,确保初始显示的倒计时能正常停留1秒后再开始递减
  3. 添加终止条件:循环仅在还有剩余时间时运行,避免倒计时结束后出现负数数值
  4. 简化UI格式化:用三元运算符统一处理秒数的补零逻辑,减少代码分支冗余

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:40:16