Разная скорость воспроизведения игр на разных ноутбуках в 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