Сколько времени.deltatime имеет значение при 2D-перемещении?

#unity3d

Вопрос:

 void movement()
{
    rb.velocity = new Vector2(rb.velocity.x, speed*Time.deltaTime);
}

void movement()
{
    rb.velocity = new Vector2(rb.velocity.x, speed);
}
 

Оба кода отлично работают для простого перемещения в направлении Y. Я хотел знать, использует ли время в простой 2D-игре, где частота кадров на самом деле не беспокоит.deltatime действительно имеет значение? Какой метод я должен выбрать, если есть какая-либо разница вообще.

Комментарии:

1. Это имеет значение, когда люди играют в вашу игру на другой машине, чем ваша. Их частота кадров / процессор могут быть быстрее или медленнее. Использование deltatime сделает скорость перемещения одинаковой для всех устройств.

2. Я понимаю, что это время. deltatime имеет. Но я не думаю, что у какого-либо устройства возникнут проблемы с запуском такой простой игры, как эта. Должен ли я по-прежнему размещать этот дополнительный код независимо от того, потому что это хорошая практика?

3. «когда частота кадров на самом деле не беспокоит», не думайте так. Кто-нибудь неизбежно попытается запустить вашу игру на тостере. Кроме того, даже если частота кадров никогда не будет очень низкой, все еще существует вероятность того, что она будет очень высокой , и в этот момент игра ускорится. Так что это хорошая идея для использования Time.deltaTime , независимо от того, какова ваша производительность.

4. Вы можете попробовать запустить свою игру на устройстве с частотой обновления экрана 120 Гц и посмотреть, работает ли она в два раза быстрее. Я видел, как это происходило раньше! Deltatime также исправит небольшие несоответствия в процессорном времени.

5. Умножение постоянной скорости на дельта-время для вычисления скорости твердого тела так же неуместно на тостере, как и на крее. не делайте этого.

Ответ №1:

Умножение чего — либо на Time.deltaTime

Интервал в секундах от последнего кадра до текущего

преобразует значение из фиксированного значения за кадр в значение за секунду. Обычно это очень важно для непрерывных движений, не зависящих от частоты кадров. И да, в этом случае вы всегда должны класть его туда. Мощный КОМПЬЮТЕР всегда будет работать с большим количеством кадров в секунду, чем телефон, независимо от того, насколько простым вы считаете свое приложение.

Однако в этом конкретном случае вы назначаете velocity

Скорость в единице равна единицам в секунду

таким образом, это уже фиксированное значение, не зависящее от частоты кадров. Сам физический движок уже заботится о перемещении правильного количества для каждого обновления физики, и вы не хотите умножать на Time.deltaTime в этом случае.

Вы хотите сделать

 void movement()
{
    rb.velocity = new Vector2(rb.velocity.x, speed);
}
 

Комментарии:

1. Я понимаю вашу точку зрения, но поскольку он уже отлично работает с deltatime, и у меня есть два предложения, в которых говорится, что я должен использовать deltatime, я использовал его. Но я хочу понять, есть ли у использования deltatime в моем случае какие-либо недостатки?

2. @ManSal да, как уже было сказано, в вашем случае это не имеет смысла. Это просто затрудняет вычисление / оценку рабочих значений, поскольку они будут разделены примерно 60 на (в зависимости от вашей конечной частоты кадров) .. как уже было сказано в целом, да, вы хотите использовать Time.deltaTime всякий раз, когда вам нужно вычислять непрерывное абсолютное значение перемещения для каждого кадра… Это не относится к образцу, который вы показываете, и здесь вы определенно не хотите этого делать => комментарии просто неверны / не применимы к вашему конкретному варианту использования 😉