IEnumerator останавливается после того, как yield возвращает новое значение WaitForSeconds () - PullRequest
0 голосов
/ 26 января 2019

У меня есть функция, которая вызывает IEnumerator, но каждый раз, когда я пытаюсь ее запустить, IEnumerator останавливается сразу после возврата yiel new.кто-нибудь может помочь?он регистрирует начало в отладке, но не регистрируется снова.

public void StartAnimation()
{
   StartCoroutine(ResizeText());        
}

IEnumerator ResizeText()
{        
    Debug.Log("start");
    yield return new WaitForSeconds(0.1f);
        Debug.Log("over");
}

1 Ответ

0 голосов
/ 26 января 2019

На самом деле этот код совершенно корректен (и имеет смысл, учитывая, как реализованы сопрограммы и как они работают). Это также имеет смысл, потому что это 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");
}
...