#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
всякий раз, когда вам нужно вычислять непрерывное абсолютное значение перемещения для каждого кадра… Это не относится к образцу, который вы показываете, и здесь вы определенно не хотите этого делать => комментарии просто неверны / не применимы к вашему конкретному варианту использования 😉