На самом деле этот код совершенно корректен (и имеет смысл, учитывая, как реализованы сопрограммы и как они работают). Это также имеет смысл, потому что это yield return
, а не yield break
.. поэтому технически код должен работать как есть.
Я тоже пробовал в пустой сцене ..
Во-первых, вы "вероятно" убиваете свою сцену до того, как пройдет время.
Воспроизводить:
Создать пустую сцену. Добавить скрипт на камеру. Добавить:
void Start()
{
StartCoroutine(meh()); //OR: StartCoroutine("meh"); //Both will work just fine..
}
private IEnumerator meh()
{
Debug.Log("Hello");
yield return new WaitForSeconds(2.0f);
Debug.Log("Bye");
}
Когда вы запустите его, он напечатает «Hello», затем подождет 2,0 секунды и напечатает «Bye» ..
Поэтому в вашем сценарии чего-то еще не хватает / неправильно ..
Единственный раз, когда код НЕ запускается после оператора yield
, это когда вы выполняете (yield break
):
private IEnumerator meh()
{
Debug.Log("Hello");
yield return new WaitForSeconds(2.0f);
Debug.Log("Bye");
yield break;
//NOTHING here will be executed because `yield break;` is like a permanent exit of the Coroutine..
//Therefore these statements below will NOT execute..
Debug.Log("Reboot");
}