Сделать сопрограмму быстрее при использовании WaitForSeconds ()? - PullRequest
2 голосов
/ 04 февраля 2020

Я искал способ ускорить работу сопрограммы на основе функции WaitForSeconds(). Минимум, на который я пошел, - 0,001f. Но я не могу go даже дальше. Чем выше таймер сопрограммы => больше времени ожидания, тем меньше таймер сопрограммы => меньше времени ожидания. Я использую Coroutine для увеличения / уменьшения сферы и пытаюсь заставить замирание работать намного быстрее.

IEnumerator FadeOut()
{
    fadeValueOut = 1f;

    while (fadeValueOut >= -1f)
    {
        color = FadeSphere.material.color;
        color.a = fadeValueOut;
        FadeSphere.GetComponent<Renderer>().material.SetColor("_Color", color);
        fadeValueOut -= 0.1f;
        yield return new WaitForSeconds(0.001f); //Make the coroutine faster?
    }      
}

1 Ответ

4 голосов
/ 04 февраля 2020

Вы пытаетесь обновить альфа-версию цветов чаще, чем может быть частота кадров.

(1000 раз в секунду по сравнению с обычным 60 верхним пределом 120)

Но чтобы ускорить затухание, вы можете буквально увеличить величину альфа-изменения каждого кадра и для достижения каждого кадра ожидания используйте null для типа возврата.

Также вы меняете альфа-набор сумма не величина, которая приспосабливается к частоте кадров, поэтому это не будет плавный переход.

Это простой метод затухания, который ускоряет скорость его исчезновения.

private IEnumerator FadeOut()
{
    Renderer rend = FadeSphere.GetComponent<Renderer>();
    Color color = rend.material.color;

    float speed = 5f;
    float acceleration = 10f;

    float alpha = 1f;

    while (alpha > 0)
    {
        speed += Time.deltaTime * acceleration;
        alpha -= Time.deltaTime * speed;
        if (alpha < 0)
        {
            alpha = 0f;
        }
        rend.material.color = new Color(color.r, color.g, color.b, alpha);
        yield return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...