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 шт):
Судя по предоставленному коду, у вас корутина в анимации зависит от времени, а не от количества итераций. Это зачит, что количество итераций (ваше 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 какой-то ваш объект, а параметры - целевое значение и время, за которое оно должно быть достигнуто.