Unity 6.3
0 онлайн 13 гостей 3 в системе
Вход

fixed-updates

Фиксированные обновления

В отличие от основного обновление кадра, UnityСистема физики обновляется с фиксированным интервалом времени, что важно для точности и последовательности физических моделей. Интервал между фиксированными обновлениями часто называется фиксированным шагом времени. Вы можете прочитать или изменить фиксированный шаг времени двумя способами:

  • В коде, путем установки значения свойства Time.fixedDeltaTime.
  • В окне Unity Editor Время, изменив значение Фиксированный Временной Шаг.

В обоих случаях фиксированный шаг времени указывается в секундах. Например, значение 0.01 означает, что каждый фиксированный шаг времени составляет одну сотую секунды, так что в секунду происходит 100 фиксированных обновлений.

Цикл фиксированного обновления симулирует код, работающий с фиксированными интервалами времени, но на практике интервал между фиксированными обновлениями не фиксирован. Это потому, что фиксированному обновлению всегда требуется кадр для запуска, а продолжительность кадра и длина фиксированного временного шага не в идеальной синхронизации. Если фиксированный временной шаг завершается в текущем кадре, соответствующее фиксированное обновление не может быть запущено до следующего кадра. Когда частота кадров низка, один кадр может охватывать несколько фиксированных временных шагов. В этом случае задержка фиксированных обновлений накапливается в текущем кадре, и Unity выполняет все их в следующем кадре, чтобы догнать.

Примечание: Существует максимальный период времени, после которого Unity не будет пытаться догнать симуляцию. Дополнительные сведения см. в Обработка изменений во времени.

Unity обеспечивает MonoBehaviour.FixedUpdate метод в качестве входной точки для выполнения вашего собственного кода при каждом исправленном обновлении. Это наиболее часто используется для выполнения вашего собственного физического кода, например, применение силы к а Rigidbody.

Более подробную информацию о том, что происходит во время цикла фиксированного обновления, можно найти в разделе Физика диаграммы порядка выполнения диаграммы.

Когда частота кадров выше, чем фиксированная частота обновления

Если ваше приложение работает с более высокой частотой кадров, чем число шагов фиксированного времени в секунду, то средняя продолжительность кадра меньше продолжительности одного фиксированного временного шага. В этом случае каждый кадр имеет одно фиксированное обновление или вообще не имеет обновления. Например, если значение фиксированного временного шага равняется 0.02, то в секунду происходит 50 фиксированных обновлений. Если ваше приложение работает со скоростью около 128 кадров в секунду, фиксированное обновление происходит каждые два или три кадра, как показано ниже.

Пример, показывающий FixedUpdate работающий на скорости 50 обновлений в секунду (0.02с на одно фиксированное обновление) и Player Loop работающий примерно на 128 кадров в секунду. Некоторые обновления кадров (отмечены желтым) имеют соответствующий FixedUpdate (отмечен зеленым), если к началу кадра прошел новый полный фиксированный шаг времени.
Пример, показывающий FixedUpdate работающий на скорости 50 обновлений в секунду (0.02с на одно фиксированное обновление) и Player Loop работающий примерно на 128 кадров в секунду. Некоторые обновления кадров (отмечены желтым) имеют соответствующий FixedUpdate (отмечен зеленым), если к началу кадра прошел новый полный фиксированный шаг времени.

На этой диаграмме показана частота кадров, опережающая частоту фиксированного обновления. Время продвигается вправо, каждый кадр пронумерован, и его вызов Update в начале кадра показан оранжевым цветом. Фиксированный шаг времени здесь составляет 0.02 секунд (50 раз в секунду), и игра работает быстрее, примерно 128 кадров в секунду. В этой ситуации есть некоторые кадры с одним фиксированным вызовом обновления, и некоторые кадры без него, в зависимости от того, завершен ли полный фиксированный шаг обновления к началу кадра. Периоды шагов фиксированного времени обозначены буквами A, B, C, D, E, и кадры, в которых происходят соответствующие вызовам фиксированные обновления, обозначены зеленым цветом. Вызов фиксированного обновления для временного шага A происходит в начале кадра 4, вызов фиксированного обновления для временного шага B происходит в начале кадра 7 и так далее.

Когда частота кадров ниже, чем фиксированная частота обновления

Если ваше приложение работает с более низкой частотой кадров, чем значение фиксированного временного шагу, то средняя продолжительность кадра больше, чем один фиксированный временной шаг. Это означает, что задержка фиксированных обновлений может накапливаться в течение некоторых кадров, и поэтому каждый кадр имеет одно или несколько фиксированных обновлений, чтобы позволить симулированию физики догнать задержку. Например, если значение фиксированного временного шагу равняется 0.01, то есть 100 фиксированных обновлений в секунду. Если ваше приложение работает примерно с 40 кадрами в секунду, Unity выполняет в среднем два или три фиксированных обновления на кадр, чтобы не отставать. Вы можете использовать такой сценарий, когда важнее моделировать более точную физику, чем иметь высокую частоту кадров.

Пример, показывающий Update, работающий со скоростью около 38 FPS и FixedUpdate, работающих со скоростью 100 обновлений в секунду. В результате, некоторые кадры имеют до трех FixedUpdates (отмечены зеленым).
Пример, показывающий Update, работающий со скоростью около 38 FPS и FixedUpdate, работающих со скоростью 100 обновлений в секунду. В результате, некоторые кадры имеют до трех FixedUpdates (отмечены зеленым).

На этой диаграмме показано, что происходит, когда цикл фиксированного обновления работает быстрее, чем частота кадров. Фиксированный шаг времени здесь составляет 0.01 секунд (100 раз в секунду), а частота кадров игры работает медленнее, примерно 38 кадров в секунду. В этой ситуации большинство кадров имеют несколько фиксированных вызовов обновления перед каждым вызовом обновления, число которых зависит от того, сколько полных шагов обновления прошло с предыдущего кадра. Периоды фиксированных шагов обновления обозначены буквами A, B, C и так далее, а кадры, в которых происходят соответствующие вызовам фиксированного обновления, отмечены зеленым цветом. Вызов фиксированного обновления для шагов времени A и B происходит в начале кадра 2, вызов фиксированного обновления для кадров C, D и E происходит в начале кадра 3 и так далее.

Примечание: Более низкое значение timestep означает более частые обновления физики и более точные симуляции, что приводит к более высокой нагрузке CPU.

Дополнительные ресурсы