Сорри, что возвращаюсь к этому вопросу, но что-то до меня не доходит работа с корутинами
Простейший вопрос - нужно запускать некую функцию раз в 10 секунд.
Функция:
Используется csharp
private IEnumerator Foo()
{
yield return new WaitForSeconds(10);
//Make all "нечто"
}
Здесь она ждет 10 секунд, потом делает "нечто".
Если ее вызывать из Update, то она будет вызываться каждый кадр и замирать на 10 секунд. Что будет через 10 секунд? Я вижу три варианта.
1. Каждый кадр начнет выполняться "нечто"?
2. Или все же после первого вызова дальнейшие вызовы ни к чему не приведут пока не выполнится один раз "нечто"? Т.е. то, что я хочу - выполнение "нечто" раз в 10 секунд.
3. Или каждый последующий вызов сбрасывает внутренний счетчик секунд и "нечто" вообще никогда не выполнится?
Ну и главное - как все же сделать запуск функции раз в 10 секунд?
Пока я сделал так:
Используется csharp
private bool _make = true;
void Update()
{
if(_make)
Foo();
}
private IEnumerator Foo()
{
_make = false;
yield return new WaitForSeconds(10);
//Make all "нечто"
_make = true;
}
Так вроде двусмысленности нет. Вызывается Foo, сразу делается _make = false, т.о. в Update она больше вызываться не будет. Через 10 секунд делается то что нужно и _make = true. Т.о. в следующем кадре Foo снова вызовется из Update.
Но мне это не нравится. Хотелось бы разобраться в Корутинах. Может можно без проверок в Update?