【问题标题】:End Coroutine if one of two conditions becomes true如果两个条件之一为真,则结束协程
【发布时间】:2018-12-06 19:41:54
【问题描述】:

我没有完全理解协程。

如果我有一个每帧都做某事的协程,如果两个条件之一为真,我该如何结束这个循环行为?

当我说结束时,我也指销毁,而不是进入保持状态或其他暂停或未完成状态,因此如果不同的条件变为真,我可以重新启动协程。

【问题讨论】:

  • 你可以使用 StopCoroutine 吗?一些代码可能有助于解释您的问题。协程更像是一个函数而不是循环——除非你在每一帧都明确地调用协程。一旦它运行并返回它不会再次运行,直到开始
  • 如果它包含多个循环 StopCoroutine 可能是最好的。否则你可以这样做: if(condition1||condition2) yield break;
  • 请提供一些代码。以前的 cmets 可能是解决方案,但是如果没有上下文,很难写出正确的答案。
  • 虽然它通常看起来很方便,但我建议尽可能避免使用协程。一个简单的单一行为通常可以完成这项工作,并且您拥有更多的控制权。
  • 鉴于我还没有使用协程,玩了几个月的 Unity,我明确表示我还不明白如何使用它们,你可以放心我不会认为它们很方便。但是,我确实了解他们提供的功能,在某些情况下确实使他们成为思考如何解决某些问题的简单方法以其他更传统的方式使用布尔值和条件,或者委托来排队和做,或者不做。你能详细解释一下这个简单的方法,以及它的威力吗?

标签: c# unity3d conditional-statements coroutine


【解决方案1】:

如果协程外存在条件,则使用StopCoroutine:

var coroutine = StartCoroutine(MyRoutine());
...
if (conditionA || conditionB) {
    StopCoroutine(coroutine);
}

如果协程内部存在条件,你只需yield break:

IEnumerator MyRoutine() {
    while (true) {
        if (conditionA || conditionB) {
            yield break; // stop stepping this
        }
        yield return null; // continue stepping next frame
    }
}

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多