渐进式编程课
Unity 目录
第 19 课2026.09.28

同一个练习流程可用于游戏内倒计时或暂停菜单提示。

第 19 课:按暂停需求选择协程时钟

  • 日期:2026-09-28
  • 课程序号:第 19 课
  • 知识点:按场景选择缩放时间或真实时间

用途或适用场景

同一个练习流程可用于游戏内倒计时或暂停菜单提示。

核心概念

游戏内倒计时用 WaitForSeconds,随 Time.timeScale 暂停;暂停菜单提示用 WaitForSecondsRealtime,继续按真实时间运行。

最小代码或操作示例

csharp
// 放在已有 MonoBehaviour 中;沿用 running、Begin 的去重与自然结束清理。
Coroutine running;
void Begin(bool duringPause) {
    if (running != null) return;
    running = StartCoroutine(Practice(duringPause));
}
System.Collections.IEnumerator Practice(bool duringPause) {
    for (int i = 0; i < 3; i++) {
        if (duringPause) yield return new UnityEngine.WaitForSecondsRealtime(1f);
        else yield return new UnityEngine.WaitForSeconds(1f);
        UnityEngine.Debug.Log(i);
    }
    running = null;
}

3~5 分钟练习

分别传入 false、true,运行时将 Time.timeScale 暂设为 0,观察日志并恢复为 1。

参考答案

false 分支的后续日志要等游戏时间恢复;true 分支仍按真实时间输出。分别完成一次运行后再启动另一次,以免 running 去重拦截。

与上一课的联系

沿用第 18 课的有界 Practice()、running 清理与真实时间等待,并取回第 17 课的缩放时间等待作对照;本课只新增按用途选择时钟的分支;下一课可为暂停菜单提供实际的 Begin(true) 入口。

时效校验

时效校验:2026-09-28(已打开 Unity 6.6 当前 WaitForSeconds、WaitForSecondsRealtime 与 Time.timeScale API;未见废弃标记;未在设备或编辑器实测)。

官方参考