Разная скорость воспроизведения игр на разных ноутбуках в Unity

Я сделал игру на своем старом ноутбуке на движке Unity, там скорость движения главного героя и объектов в самом редакторе была нормальной. Сейчас я экспортировал файл с проектом .unitypackage в новый проект на новый ноутбук, и скорость увеличилась раза в 2-3 и иногда она замедляется. Можно ли это как-то исправить или надо подгонять под своё "железо" ноутбука? P.s. скорость увеличивается и в 2D проектах и в 3D проектах.


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

Автор решения: Максим Фисман

Чем навороченнее быстрее в у вас компьютер, тем больше FPS (frames per second) - кадров в секунду. Метод Update срабатывает каждый кадр.

Логично, что если вы в Update двигаете героя, например, на 1 вправо, то при FPS=50 он за секунду сдвинется на 50 клеток, при FPS=100 - в два раза дальше.

Чтобы это предотвратить есть Time.deltaTime, который равен The completion time in seconds since the last frame. This property provides the time between the current and previous frame - Время в секундах с момента завершения последнего кадра. Это свойство отвечает за время между текущим и предыдущим кадром. Сответственно, если вы будете домножать длину вектора перемещения на Time.deltaTime, то ваш объект будет за секунду проодить одинаковое расстояние вне зависимости от FPS.

Пример:

private float Update () {
    Player.transform.Translate(direction * speed * Time.deltaTime);
}

С помощью этого свойства можно также реализовать таймер.

private float  timer;
private float Update () {
    timer += Time.deltaTime;
} 

Через X секунд переменная timer будет равна X вне зависимости от FPS

А вообще, если у вас движение физическое, то следует использовать FixedUpdate(), который вызывается 50 раз в секунду (каждый 0.02с) вне зависимости от FPS.

Связано: Time.fixedDeltaTime

→ Ссылка