Unity, каким образом значения передаются в корутины?

В одном из уроков Unity learn я не понял одну вещь

public bool isGameActive;

void Start() {
   StartCoroutine(methodName);
   isGameActive = true;
}
IEnumerator methodName() {
   while(isGameActive) {
      Debug.Log("Y");  //никогда не выведется.
   }
}

Насколько я знаю, корутины это отдельный поток кода который срабатывает независимо от основного кода, я знаю что нужно присваивать значение переменной (isGameActive) до запуска корутины, но не понимаю почему так происходит, корутина останавливается сама после того как весь код будет выполнен в ней? хотя это перечит её функции, т.к. она должна вроде как повторятся непрерывно? Почему цикл while в корутине не срабатывает когда в основном потоке, переменной isGameActive задается значение true?


Ответы (1 шт):

Автор решения: Yaroslav
  • Во первых твоя корутина, тупо корутина, потому что там нет прерывателя yield, на что тебе жалуется компилятор.
  • Во вторых StartCoroutine принимает не имя метода а метод (с аргументами или без, но точно с скобками), на что компилятор тоже жалуется.
  • Во третьих если цикл не сработал, то очевидно условия равняется false, корутина тут причем? Debug.Log(isGameActive?"Y":"N"); перед циклом написать не пробывал? (реторический вопрос)

Корутина это не асинхронный метод, она в том-же потоке, о чем человеческим по белому написано в одном из первых обзацев документации, чтобы люди не выдумывали из каких мест знать. Следственно корутина реагирует на поля класса так-же как любой другой член класса.

Корутина ни чего ни кому не должна, как только код в методе закончился, кончилась и она сама. Если в ней нет цикла, это не её ошибка, она инструмент.

→ Ссылка