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

Для чего нужен FixedUpdate в MonoBehaviour?

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

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

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

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

FixedUpdate в Unity

FixedUpdate — критически важный метод для физических расчётов в Unity. Он вызывается с фиксированным временным интервалом (по умолчанию 50 раз в секунду), независимо от частоты кадров.

Ключевые различия Update vs FixedUpdate

Update — вызывается один раз в кадр (частота зависит от FPS):

  • 60 кадров = 60 вызовов Update
  • 30 кадров = 30 вызовов Update

FixedUpdate — вызывается с фиксированным шагом (всегда одинаково):

  • Независимо от FPS, вызывается 50 раз в секунду (по умолчанию)
  • Может быть несколько вызовов FixedUpdate в одном кадре при высоком FPS

Когда использовать

FixedUpdate нужен для:

  • Применения сил к Rigidbody
  • Физических расчётов и симуляций
  • Работы с гравитацией и столкновениями
  • Консистентной физики независимо от производительности

Update используй для:

  • Обработки ввода (Input.GetKey, Input.GetAxis)
  • Логики игры и геймплея
  • Анимаций персонажа
  • Проверок условий

Практический пример

public class PlayerMovement : MonoBehaviour
{
    private Rigidbody rb;
    public float moveSpeed = 5f;
    private float inputX;
    
    private void Update()
    {
        // Получаем ввод ЗДЕСь
        inputX = Input.GetAxis("Horizontal");
    }
    
    private void FixedUpdate()
    {
        // Применяем силу ЗДЕСь
        Vector3 newVelocity = rb.velocity;
        newVelocity.x = inputX * moveSpeed;
        rb.velocity = newVelocity;
    }
}

Почему это важно

❌ Неправильно (применение силы в Update):

private void Update()
{
    rb.AddForce(Vector3.forward * 10f);  // Неустойчиво!
}

✅ Правильно (применение силы в FixedUpdate):

private void FixedUpdate()
{
    rb.AddForce(Vector3.forward * 10f);  // Стабильно!
}

Порядок вызовов в цикле

  1. FixedUpdate() — один или несколько раз (фиксированный интервал)
  2. Update() — один раз в кадр
  3. LateUpdate() — один раз в кадр
  4. Render — отрисовка

Итоги

  • FixedUpdate = фиксированный интервал = физика = консистентность
  • Update = переменный интервал = логика = гибкость
  • Всегда применяй силы и работай с Rigidbody в FixedUpdate
  • Получай ввод в Update, применяй эффект в FixedUpdate

Это одно из самых важных правил в Unity для корректной физики!