← Назад к вопросам

Что такое Time.fixedDeltaTime?

1.3 Junior🔥 202 комментариев
#Unity Core#Физика и математика

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Time.fixedDeltaTime: Основы и применение

Time.fixedDeltaTime — это статическое свойство в Unity, которое представляет интервал времени между фиксированными шагами вычислений физического движка. Это значение является фиксированным и неизменным во время выполнения (если не изменено явно через код), в отличие от Time.deltaTime, который отражает реальное время между кадрами рендеринга и может варьироваться.

Основное назначение

Главная роль Time.fixedDeltaTime — обеспечивать стабильность физических вычислений. Физический движок Unity (PhysX) работает на отдельном, фиксированном цикле обновления, чтобы гарантировать точность и надежность расчетов коллизии, силы, скорости и других физических параметров. Это предотвращает проблемы, когда изменяющаяся длительность кадра (deltaTime) могла привести к нестабильному поведению физики (например, объекты могли "пролететь" через другие объекты на высокой скорости).

Типичное значение и изменение

По умолчанию Time.fixedDeltaTime равна 0.02 секунды (50 обновлений в секунду). Это значение можно изменять:

  • В редакторе: через меню Edit -> Project Settings -> Time.
  • В коде: напрямую присваивая новое значение свойству Time.fixedDeltaTime.
// Пример изменения фиксированного шага времени в коде
void Start()
{
    // Увеличиваем частоту обновления физики до 100 раз в секунду
    Time.fixedDeltaTime = 0.01f;
    // ИЛИ уменьшаем до 25 раз в секунду для снижения нагрузки
    // Time.fixedDeltaTime = 0.04f;
}

Использование в FixedUpdate и физических расчетах

Метод FixedUpdate() автоматически вызывается движком Unity с интервалом, равным Time.fixedDeltaTime. Именно здесь следует выполнять код, связанный с физикой. Для расчета движения, основанного на физике, внутри FixedUpdate используется fixedDeltaTime, а не deltaTime.

using UnityEngine;

public class PhysicsMovement : MonoBehaviour
{
    public float speed = 5.0f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Правильно: используем fixedDeltaTime для физического движения
        Vector3 force = Vector3.forward * speed * Time.fixedDeltaTime;
        rb.AddForce(force);
        
        // НЕПРАВИЛЬНО использовать здесь Time.deltaTime для физики!
    }

    void Update()
    {
        // Update использует для не-физических операций Time.deltaTime
        // Например, для вращения графики или обработки ввода
        float rotation = Input.GetAxis("Horizontal") * 100 * Time.deltaTime;
        transform.Rotate(0, rotation, 0);
    }
}

Ключевые различия между deltaTime и fixedDeltaTime

  • Time.deltaTime: Изменяется каждый кадр, соответствует реальному времени между вызовами Update(). Используется для графики, анимаций, игрового процесса, не зависящего от физики.
  • Time.fixedDeltaTime: Фиксированное значение (по умолчанию 0.02f). Используется в FixedUpdate() для всех операций с физикой, чтобы обеспечить стабильные и точные расчеты.

Практические советы и важные нюансы

  1. Не изменяйте Time.fixedDeltaTime динамически без необходимости. Частое изменение может нарушить стабильность физики.
  2. Если fixedDeltaTime слишком мала (высокая частота), это увеличивает нагрузку на CPU из-за частых вызовов FixedUpdate.
  3. Если fixedDeltaTime слишком велика (низкая частота), физика может стать "грубой" и менее точной, особенно для быстрых объектов.
  4. Связь с максимальной частотой кадров: Если FixedUpdate занимает больше времени, чем один кадр рендеринга, движок может вызывать несколько FixedUpdate за один кадр, чтобы "нагнать" время. Это поведение контролируется параметром Maximum Allowed Timestep в настройках времени проекта.
  5. Для вычислений, связанных с физикой, но вне FixedUpdate (например, в Update), если нужно учесть фиксированный шаг, можно использовать Time.fixedDeltaTime, но это требуется редко.

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

Что такое Time.fixedDeltaTime? | PrepBro