В Unity C# я использую сопрограмму для отображения простого шаблона на экране через х секунд, используя строку «yield return new WaitForSeconds (1.5f)», но после ее первого вызова она изменяет isPlayerTurn с false на true.Почему сопрограмма изменяет значение переменной?
void Update() {
if (!isPlayerTurn) {
pattern.Add (Random.Range (1, 5));
Debug.Log (isPlayerTurn);
StartCoroutine(ShowPattern());
isPlayerTurn = true;
}
pointGUI.GetComponent<UnityEngine.UI.Text>().text = "Points: " + playerPoints;
}
private IEnumerator ShowPattern() {
Debug.Log (isPlayerTurn);
yield return new WaitForSeconds (1.5f);
Debug.Log (isPlayerTurn);
// etc
}
Выход из бревен являются
False
False
True
Есть ли причина такого поведения, или это логическая ошибка?
* Это * не меняет 'isPlayerTurn', * вы * изменение' isPlayerTurn'. Код, который его изменяет, находится прямо в вашем вопросе. Можете ли вы пояснить, какое поведение вы ожидали и почему? – hvd
@hvd Значение 'isPlayerTurn' должно оставаться' False' после этого урока, потому что оно необходимо с помощью функции 'ShowPattern()' и должно быть 'True' только после того, как' ShowPattern() 'завершает выполнение (на // и т. Д. часть). –
Я не спрашиваю, почему вы хотите, чтобы он был «ложным», я спрашиваю, почему вы думаете, что текущий код сохранит его «false». – hvd