第 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;未见废弃标记;未在设备或编辑器实测)。