Я бы предложил вам сначала сохранить Coroutine в переменной.
Coroutine myCoroutine;
void Awake()
{
myCoroutine = StartCoroutine(RandomMove());
}
и измените функцию сопрограммы на
IEnumerator RandomMove()
{
// print(Time.time);
yield return new WaitForSeconds(foo);
// print(Time.time);
// Call your new coroutine here
myCoroutine = StartCoroutine(RandomMove());
}
таким образом, у вас будет переменная сопрограммы для каждой итерации. Если вам нужно остановить сопрограмму, просто скажите:
StopCoroutine(myCoroutine);
в вашей функции в нужное время. Это позволит вам остановить сопрограмму посередине до окончания обратного отсчета. Также в конце сопрограммы она запустит новую сопрограмму с обновленной ссылкой. После завершения задания просто перезвоните с
myCoroutine = StartCoroutine(RandomMove());
Надеюсь, это решит вашу проблему. Да, вы можете сделать это с таймером и с булевым флагом, но я думаю, что использование сопрограммы намного проще.
.