我正在使用协程设置如下的重复延迟。

在我的清醒中

StartCoroutine(RandomMove());


再往下走

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

    }


其中,“ foo”是我每次迭代都会更改的随机浮点值。
可以说foo是10秒,在延迟的途中,我需要重设延迟,以便它从10开始再次“倒计时”。

我将如何完成?我应该改用计时器吗?

最佳答案

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

杀死并重新启动协程:

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

Coroutine myCoroutine;
void Awake() {
    myCoroutine = StartCoroutine(RandomMove());
}


但是,我们将以其他方式处理其余问题。 killer_mech从不对引用进行任何操作,只是继续对其进行写操作。

这是我们正在做的:

public void resetRandomMove() {
    StopCoroutine(myCoroutine);
    myCoroutine = StartCoroutine(RandomMove());
}


每当您需要重置它时,都调用它。

10-05 21:35