Unity, каким образом значения передаются в корутины?
В одном из уроков Unity learn я не понял одну вещь
public bool isGameActive;
void Start() {
StartCoroutine(methodName);
isGameActive = true;
}
IEnumerator methodName() {
while(isGameActive) {
Debug.Log("Y"); //никогда не выведется.
}
}
Насколько я знаю, корутины это отдельный поток кода который срабатывает независимо от основного кода, я знаю что нужно присваивать значение переменной (isGameActive) до запуска корутины, но не понимаю почему так происходит, корутина останавливается сама после того как весь код будет выполнен в ней? хотя это перечит её функции, т.к. она должна вроде как повторятся непрерывно? Почему цикл while в корутине не срабатывает когда в основном потоке, переменной isGameActive задается значение true?
Ответы (1 шт):
- Во первых твоя корутина, тупо корутина, потому что там нет прерывателя
yield, на что тебе жалуется компилятор. - Во вторых
StartCoroutineпринимает не имя метода а метод (с аргументами или без, но точно с скобками), на что компилятор тоже жалуется. - Во третьих если цикл не сработал, то очевидно условия равняется
false, корутина тут причем?Debug.Log(isGameActive?"Y":"N");перед циклом написать не пробывал? (реторический вопрос)
Корутина это не асинхронный метод, она в том-же потоке, о чем человеческим по белому написано в одном из первых обзацев документации, чтобы люди не выдумывали из каких мест знать. Следственно корутина реагирует на поля класса так-же как любой другой член класса.
Корутина ни чего ни кому не должна, как только код в методе закончился, кончилась и она сама. Если в ней нет цикла, это не её ошибка, она инструмент.