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!"; }
关键修改说明
- 初始值修正:将
minutes设为2、seconds设为0,与初始显示的"2:00"完全匹配 - 逻辑顺序调整:先执行等待再更新数值,确保初始显示的倒计时能正常停留1秒后再开始递减
- 添加终止条件:循环仅在还有剩余时间时运行,避免倒计时结束后出现负数数值
- 简化UI格式化:用三元运算符统一处理秒数的补零逻辑,减少代码分支冗余
内容的提问来源于stack exchange,提问作者Hayk
相关产品推荐
相关产品推荐

