渐进式编程课
Unity 目录
第 17 课2026.09.23

有限次数的练习协程自行结束后,允许下一次点击重新启动。

第 17 课:协程自然结束后清空引用

  • 日期:2026-09-23
  • 课程序号:第 17 课
  • 知识点:协程完成后的引用清理

用途或适用场景

有限次数的练习协程自行结束后,允许下一次点击重新启动。

核心概念

上一课用 running != null 阻止重复启动;Coroutine 引用不会在迭代器结束时自动变为 null,需要在正常完成路径清空它。

最小代码或操作示例

csharp
Coroutine running;
void Begin() {
    if (running != null) return;
    running = StartCoroutine(Practice());
}
System.Collections.IEnumerator Practice() {
    for (int i = 0; i < 3; i++) {
        yield return new UnityEngine.WaitForSeconds(1f);
        UnityEngine.Debug.Log(i);
    }
    running = null;
}

3~5 分钟练习

等待三次输出结束后,再调用一次 Begin()。

参考答案

第一次自然结束时 running 被清空,第二次调用会启动新协程;执行期间的重复调用仍被拦下。

与上一课的联系

沿用第 16 课有界 Practice() 及第 15 课的 running 去重检查;本课只在正常结束后清空引用;下一课可比较暂停游戏时的缩放时间与真实时间等待。

时效校验

时效校验:2026-09-24(已打开 Unity 6.6 MonoBehaviour.StartCoroutine 与 WaitForSeconds 当前文档;未见本课 API 废弃标记)。

官方参考