Почему моя игра зависает в сопрограмме? - PullRequest
0 голосов
/ 01 января 2019

извините, если этот вопрос очень простой.Я создал сопрограмму, которая обнаруживает столкновения каждые 5 секунд.Внутри этой сопрограммы я хотел бы выполнить анимацию в течение 3 секунд, поэтому я получил следующий фрагмент кода:

private IEnumerator OnCollisionStay2D(Collision2D collision)
{
    if (collision.collider.tag == "mama") {
        //interrupt movement
        float currentTime = Time.time;
        float madBegin = Time.time;
        while (currentTime - madBegin < 3)
        {
            personAnimator.runtimeAnimatorController = Resources.Load("Animations/human1mad_0") as RuntimeAnimatorController;
            currentTime = Time.time;
            Debug.Log(currentTime);
        }
        isAngry = true;
    }
    yield return new WaitForSeconds(5);
}

Я записал истекшее время в цикле while, и currentTime, похоже, необновление.В результате истекшее время равно 0, и мой цикл while никогда не завершается.Кроме того, так как это выполняется в сопрограмме, которая должна выполняться одновременно, я не понимаю, почему не-циклический цикл while заморозил бы всю игру.

Разъяснение высоко ценится.

1 Ответ

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

Из документов Unity на Time.time

Время в начале этого кадра (только чтение)

Это означает, чтоваш Time.time не изменится в течение вашего цикла, поэтому разница между currentTime и madBegin всегда будет 0.

Time.realtimeSinceStartup может быть тем, что выищу.

...