Unity Coroutine работает с разной скоростью

Я сделал корутину для плавного отображения canvas group и на пк работает норм, но если проверять на макбуке, то скорость (не производительность!!!) именно скорость очень сильно ниже, не i+=.01f, а где-то i+=.0001f, ну очень медленно, на пк после срабатывания корутины, окно появляется в одну секунду, на маке нужно ждать 7сек. Как это исправить?

for (float i = cg.alpha; i <= 1.1f; i+=.01f)
    {
        cg.alpha = i;
        yield return null;
    }

Ответы (1 шт):

Автор решения: vmchar

Судя по предоставленному коду, у вас корутина в анимации зависит от времени, а не от количества итераций. Это зачит, что количество итераций (ваше i+=.01f) на всех устройствах будет одинаковое. Другой вопрос, что вы делаете yield return null, что значит, что каждый шаг анимации происходит 1 раз за 1 кадр. Чем ниже частота кадров (fps) тем дольше по времени будет выполняться ваша анимация. В таком варианте, как у вас нельзя рассчитывать на то, что на разных устройствах с разной производительностью время этой анимации будет одинаковым.

Теперь практичный совет - ваше решение, своего рода изобретение велосипеда, на отладку которого вы тратите много времени. Чтобы этого избежать используйте DoTween, даже его бесплатной версии хватит на все ваши нужны с лихвой. К тому же он позволяет делать анимации по времени, а не по кадрам. В вашем случае можно воспользоваться DoTween.DoFade(), например :

sequence = DOTween.Sequence();
sequence.Append(myObject.DOFade(1.0f, 0.2f));
sequence.Play();

где myObject какой-то ваш объект, а параметры - целевое значение и время, за которое оно должно быть достигнуто.

→ Ссылка