Как работает игровая петля: простое объяснение для всех, кто делает или хочет делать игры
Даже если вы не пишете код, понимание game loop — это база. Именно здесь рождаются лаги, кривые тайминги, проблемы анимации и вопросы: «почему враг не реагирует» и «почему у меня всё трясётся».
И всё это можно объяснить очень просто.
Что такое game loop
Представьте себе игру как классическую тетрадь в клетку.
Каждая клеточка — это один кадр.
Внутри кадра игра должна:
- Принять ввод игрока (кнопки, мышь).
- Обновить всю логику (AI, перемещение, способности).
- Посчитать физику.
- Обновить анимации.
- Нарисовать картинку.
Потом — следующее. И так n раз в секунду, если у вас n FPS (также ФПС — Частота кадров в секунду).
Почему важно понимать, что не всё делается каждый кадр
Возможно, кто то подумает:
«Хочу, чтобы враг проверял игрока каждую секунду, значит поставлю таймер, и всё, изи».
Но это не так.
Если вы проверяете врага в Update(), то это происходит каждый кадр. А кадр не равно секунда. Это может быть 16 мс, 33 мс, 50 мс — зависит от ФПС.
Поэтому такой метод нам не подходит, слишком много вычислений в секунду, и, как следствие, большая нагрузка на железо.
Также, у всех разное железо, из этого следует множество проблем (ниже лишь парочка из них):
у кого-то враги думают слишком часто. а у кого-то тупят;
у кого-то способности откатываются в два раза медленнее, а у кого-то, соответственно, быстрее;
Зачем нужен дельта-тайм (и почему без него всё ломается)
Дельта-тайм — это сколько времени прошло между кадрами.
Например:
на мощном ПК кадры идут с интервалом 0.016 секунд;
на слабом — 0.040 секунд.
Если вы реализуете движение так:
то на слабом ПК персонаж будет двигаться медленнее. Потому что перемещение за кадр постоянное, а кадров меньше.
И тут дельта-тайм выходит на первый план:
И если сделать так, то перемещение зависит от времени между кадрами, а не от FPS, и все у нас двигаются одинаково.
⚠ Небольшое уточнение
deltaTime спасает, когда вы сами руками двигаете объект по формуле — без физики движка. Тогда да, скорость и анимации становятся независимыми от FPS.
Но если вы используете физику движка, одной дельты мало. Там важен ещё и фиксированный ритм расчётов — об этом как раз следующий блок.
FixedUpdate / Fixed Tick — что это и зачем
Что это вообще такое?
В игре есть два ритма жизни:
- Ритм кадров (Update) — идёт столько раз, сколько успевает железо. Может быть 120 раз/сек на мощном ПК, 40 раз/сек на старом ноуте.
- Ритм физики (FixedUpdate / Fixed Tick) — идёт строго фиксированно. Например, 50 раз в секунду всегда, независимо от FPS.
Почему нужен фиксированный ритм?
Потому что физика ломается, если зависит от ФПС.
Представьте прыжок персонажа:
- В Update вы считаете прыжок 60 раз/сек у одного игрока.
- И 35 раз/сек — у другого, ибо у него ФПС меньше из-за слабого пк.
- Персонажи прыгают по-разному, потому что расчётов разное количество, вот вам и хаос.
Физика должна быть:
- одинаковая на всех устройствах;
- предсказуемая;
- стабильная даже при просадках FPS.
Поэтому движки сделали отдельный ритм — FixedUpdate (Unity)/Fixed Tick (UE/Godot).
Простое правило:
- всё, что связано с физикой (Rigidbody, гравитация, прыжки, столкновения) — обновляем в фиксированном тике;
- всё, что связано с логикой, камерой, UI, эффектами — живёт в обычном Update и скейлится через deltaTime.
Почему изучение game loop улучшает жизнь даже у художника/дизайнера
Потому что вы перестаёте относиться к игре как к магическому чёрному ящику.
Вы начинаете понимать:
- прорывы анимации — потому что логика и анимация отрабатывают в разные кадры;
- лаги UI — тяжёлая логика в одном кадре блокирует рендер;
- AI тупит — потому что проверка условий прописана через Update и зависима от FPS;
- камера дёргается — из-за работы без дельта-тайма;
- физика непредсказуема — потому что не в Fixed.
Это то, что экономит дни дебага, даже если вы лично не пишете код.
Простой тест: понимаете ли вы game loop
Ответьте себе на 5 вопросов:
- Прыжок персонажа считается в Update или Fixed?.
- Почему враг на слабом ПК реагирует на игрока реже?
- Что произойдёт, если убрать deltaTime?
- Почему UI может лагать, даже если сцена пустая?
- Может ли 10 ms действия в одном кадре уронить FPS до 30?
Если на 3+ вопросов ответили — вы уже понимаете эту тему лучше половины джунов, иначе — рекомендуем вернуться обратно к темам.
Мини итоги
Game loop — это сердце игры. Если вы понимаете, как оно бьётся, вы перестаёте делать наугад и начинаете собирать вещи осознанно: анимации, движение, AI, физику, способности, эффекты.
У нас всё, спасибо за прочтение.
Всем добра!