Выполнение возврата доходности останавливает сопрограмму в Unity

Когда я использую yield return null; или любой другой тип возврата, я получаю свой конец сопрограммы. У меня есть цикл для печати всех букв с интервалом, но когда я выполняю yield return IEnumerator сопрограмма заканчивается

Но без yield все работает нормально.

Вот код

    public Text text;
    Animation anim;
    public Coroutine cor = null;
    private bool corR = false;
    public float timing = 0.0f;

    public void ChangeText(string txt)
    {
        if (cor != null)
        {
            StopCoroutine(cor);
            cor = null;
        }

        cor = StartCoroutine(__change(timing, txt));
    }

    IEnumerator __change(float time, string txt)
    {
        text.text = "";
        for(int i = 0; i < txt.Length; i++)
        {
            text.text += txt[i];

            yield return new WaitForSeconds(time);
        }


        corR = false;
    }```

Всего 1 ответ


Сам по себе код выглядит хорошо, и если ничто иное не мешает этому сценарию (например, отключить его и т. Д.), Мне кажется, что ваш Time.timescale равен 0

WaitForSeconds зависит от Time.timescale .

Реальное время приостановлено равно данному времени, деленному на Time.timescale . Смотрите WaitForSecondsRealtime если вы хотите ждать, используя немасштабированное время. WaitForSeconds может использоваться только с оператором yield в сопрограммах.

Так что, если это так, вы хотите использовать WaitForSecondsRealtime

IEnumerator __change(float time, string txt)
{
    // you might probably also want to set this in the beginning
    corR = true;

    text.text = "";
    for(int i = 0; i < txt.Length; i++)
    {
        text.text += txt[i];

        yield return new WaitForSecondsRealtime(time);
    }

    corR = false;
}

Есть идеи?

10000