【问题标题】:Unity: Are running Coroutines destroyed upon loading new scene?Unity:加载新场景时正在运行的协程是否被破坏?
【发布时间】:2016-09-20 08:38:36
【问题描述】:

如果您有一个协同程序在附加到给定场景中的对象的脚本中运行,那么当该场景结束时,协同程序会被终止/销毁吗? ...即使协程包含例如一个无限的 While 循环?


例如,如果我将以下协程附加到场景中的对象:

IEnumerator SampleCoroutine()
{
    while (true) {
        yield return new WaitForSeconds(1.0f);
    }
    yield return null;
}

...当一个新的场景被加载时,假设对象上没有包含“DontDestroyOnLoad(...)”的脚本,协程还会在新加载的场景中执行吗?

询问原因:我需要知道是否需要保留所有活动协程的列表,以便在每次场景更改后结束它们。我不希望在使用更多场景时性能下降。

【问题讨论】:

    标签: c# unity3d ienumerable scene coroutine


    【解决方案1】:

    简答:

    是的,它们将在 Coroutines 运行时终止,具体取决于它们启动时的 MonoBehaviour。没有MonoBehaviour == 没有Coroutine

    【讨论】:

    • 所以澄清一下,当它们被调用的对象被销毁时,它们将被终止?
    • @BenHayward 调用StartCoroutine 的 MonoBehaviour 决定了它何时停止。例如。如果 MonoBehaviour A 调用 StartCoroutine 使用 MonoBehaviour BIEnumerator 方法,那么协程只会在 MonoBehviour A 被销毁时停止调用。
    • @BenHayward 就像 gjttt1 所说的那样。我编辑了答案,因为我的答案以“否”开头,但应该以“是”开头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多