重置重复协程延迟

Bac*_*alo 2 c# coroutine unity-game-engine

我正在使用协程来设置重复延迟,如下所示。

在我清醒的时候我有

StartCoroutine(RandomMove());
Run Code Online (Sandbox Code Playgroud)

然后再往下

IEnumerator RandomMove()
    {
       while (true)
        {
            // print(Time.time);
            yield return new WaitForSeconds(foo);
            // print(Time.time);
        }

    }
Run Code Online (Sandbox Code Playgroud)

其中“foo”是一个随机浮点值,我会在每次迭代时更改它。假设 foo 是 10 秒,并且在延迟中,我需要重置延迟,以便它再次从 10 开始“倒计时”。

我将如何实现这个目标?我应该使用计时器吗?

Dra*_*18s 5

我不喜欢现有的两个答案。这就是我要做的:

终止并重新启动协程:

我们将从 Killer_mech 答案的这一部分开始:

Coroutine myCoroutine;
void Awake() {
    myCoroutine = StartCoroutine(RandomMove());
}
Run Code Online (Sandbox Code Playgroud)

但我们将以不同的方式处理其余的事情。Killer_mech除了继续覆盖它之外,从未对该引用执行过任何操作。

这就是我们正在做的事情:

public void resetRandomMove() {
    StopCoroutine(myCoroutine);
    myCoroutine = StartCoroutine(RandomMove());
}
Run Code Online (Sandbox Code Playgroud)

任何需要重置的时候都可以调用它。