Skip to content
E
Egmatic
dvizhok-2d-fiziki2d-fizikabox2dfizika-v-igrakhstolknoveniya2d-igry

Движок 2D-физики: всё, что нужно знать

Движок 2D-физики просчитывает, как объекты на плоскости движутся, сталкиваются и реагируют на силы — только по осям X и Y. Фактический стандарт здесь Box2D: на нём работают Unity и GDevelop, а Godot использует собственный движок. Объясняем, что делает 2D-физический движок, как устроено обнаружение столкновений и цикл симуляции, как соотносятся ведущие движки и из-за каких ошибок настройки (неверный масштаб мира, перемещение статических тел, создание связей каждый кадр) физика ощущается «неправильно».

Vladislav Kovnerov18 июня 2026 г.14 мин

Движок 2D-физики — это программный слой, благодаря которому объекты в плоской игре движутся, падают, сталкиваются и отскакивают так, будто у них есть настоящая масса и инерция. Каждый раз, когда персонаж приземляется на платформу, ящик падает с уступа, а мяч отскакивает от стены, движок приложил силы, учёл их в движении и разрешил столкновение — и всё это только по осям X и Y.

Если из всей статьи запомнить одно, пусть будет это: фактический стандарт здесь — Box2D, а самая частая причина того, что физика в 2D-игре «ощущается не так», — неверный масштаб мира, когда в решатель, ждущий метры, подают пиксели. Всё остальное — детали вокруг этих двух фактов.

Мировой рынок игровых движков растёт быстро: по данным Grand View Research, в 2024 году он составил около 3,07 миллиарда долларов и к 2030 году достигнет 8,35 миллиарда при среднегодовом росте 18,4%. И именно 2D — среда большинства независимых и мобильных проектов, ведь плоскость дешевле симулировать и она работает на более слабом железе. Этот материал рассказывает, что на самом деле делает 2D-физический движок, как устроено обнаружение столкновений, как соотносятся ведущие движки и каких ошибок настройки стоит избегать.

Что делает движок 2D-физики

Физический движок вычисляет силы в симуляции так, чтобы объекты вели себя по законам физики, и затем переводит эти силы в движение. В 2D всё происходит на плоскости: нет глубины, перспективы и объёмной массы. Это убирает целую ось вычислений — именно поэтому 2D-физика работает быстрее и дешевле 3D и доминирует на мобильных устройствах.

Каждый шаг симуляции проходит один и тот же цикл:

  1. Приложить силы. Гравитация, пружины, ввод игрока и связи действуют на тела.
  2. Вычислить ускорение. Второй закон Ньютона, F = ma, превращает силу в ускорение.
  3. Учесть ускорение в скорости. Ускорение обновляет скорость каждого тела за временной шаг.
  4. Сдвинуть объект. Скорость перемещает тело, после чего столкновения находятся и разрешаются.

2D-движок ведает тремя вещами: динамикой (силами, ускорением, моментом вращения), кинематикой (движением и положением) и столкновениями (их обнаружением и разрешением). Чего стандартные движки не делают — так это деформации: они симулируют твёрдые тела, которые не гнутся и не ломаются. Ткани, верёвки, мягкие тела и жидкости выходят за эти рамки. Если нужна симуляция жидкости, берут расширение: LiquidFun от Google добавил к Box2D частицы, жидкости и мягкие тела.

Базовые компоненты

Любой крупный 2D-движок — готовый или самописный — собран из одних и тех же частей.

Мир физики — контейнер, который хранит глобальные настройки: гравитацию (с отдельными компонентами X и Y), масштаб гравитации для каждого тела и временной шаг, на котором работает симуляция.

Твёрдые тела — то, что движется на самом деле. Каждое тело относится к одному из трёх типов:

Тип телаДействует ли гравитация?Как перемещаетсяДля чего подходит
ДинамическоеДаСилами, импульсами, скоростьюВсё, что должно реагировать на физику: персонажи, ящики, мячи
СтатическоеНетНикак — его ставят один разЗемля, стены, постоянные платформы
КинематическоеНетЕго двигают вручную через скоростьДвижущиеся платформы, вращающиеся опасности

Физические свойства определяют поведение тела при контакте. Плотность задаёт массу (в 2D — масса, делённая на площадь). Трение сопротивляется скольжению по поверхности: почти ноль для льда, около единицы для песка. Упругость, или отскок, — какую долю энергии тело сохраняет после удара: ноль для мёртвого груза и 0,8 и выше для резинового мяча.

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

Как устроено обнаружение столкновений

Это самая дорогая часть физической симуляции. Если объектов N, возможных пар N(N−1)/2 — для ста объектов это примерно 5000 проверок на каждом шаге. Ни один движок не проверяет их все. Вместо этого используется двухфазный подход.

Широкая фаза — быстрый приближённый проход, который отбрасывает пары, заведомо не способные столкнуться. Стандартный инструмент — выровненный по осям ограничивающий прямоугольник (AABB): дешёвый прямоугольник вокруг каждого объекта. Если прямоугольники не пересекаются, объекты не могут касаться, и пара отбрасывается сразу. В результате остаётся короткий список пар, которые могли бы столкнуться.

Узкая фаза выполняет точную и дорогую геометрическую проверку только для этого короткого списка. Она вычисляет реальные точки контакта, нормаль столкновения и то, насколько сильно формы пересекаются, — глубину проникновения, нужную решателю, чтобы растолкать тела.

Разрешение столкновения затем разводит объекты. Стандартный метод — импульсный: движок прикладывает мгновенное изменение скорости (импульс), пропорциональное обратной массе каждого тела. Поэтому боулингный шар почти не замедляется, ударив шарик для пинг-понга, а шарик улетает — большую часть импульса забирает более лёгкое тело.

Для быстро движущихся объектов важно ещё одно понятие — непрерывное обнаружение столкновений (CCD). Без него пуля, летящая за кадр дальше собственной длины, может проскользнуть сквозь тонкую стену: движок просто не заметит пересечения, потому что оно произошло между шагами. CCD «размазывает» движение объекта вдоль шага, чтобы поймать такие промахи. В Box2D эта возможность есть, в Chipmunk2D — нет.

Ведущие движки 2D-физики в сравнении

Большинство разработчиков вообще не выбирает физический движок напрямую — оно пользуется тем, что встроен в игровой движок. Но если вы подбираете библиотеку или хотите понять, на чём работаете, вот как соотносятся основные варианты.

ДвижокЯзыкГде силёнCCDЛицензия
Box2DC/C++Стандарт; на нём Unity и GDevelopДаMIT
Chipmunk2DCЛёгкие переносимые нативные игрыНетMIT
Matter.jsJavaScriptБраузерные игры, простой APIНетMIT
Planck.jsJavaScriptВеб-игры, которым нужен уровень Box2DДаMIT
RapierRust / WASMСовременные 2D и 3D, детерминированный мультиплеерДаApache-2.0 / MIT

Box2D, созданный Эрином Катто и выпущенный в 2007 году, — движок, на котором работает 2D-режим Unity и физическое поведение в GDevelop. Он быстрый, стабильный, хорошо задокументированный и ограничен 2D-телами: мягких тел и жидкостей в нём из коробки нет. Godot — заметное исключение: его 2D-физика по умолчанию работает на собственном движке Godot Physics 2D, а Box2D (или Rapier) доступен только как стороннее дополнение. Chipmunk2D — более лёгкая библиотека на C; её главное ограничение — отсутствие CCD, что критично для шутеров и пинбола, но не для медленных игр.

Для браузера Matter.js освоить проще всего, а Planck.js — порт Box2D на JavaScript — выбирают, когда в браузере нужны возможности и производительность Box2D. Rapier, написанный на Rust со сборкой в WebAssembly, работает и с 2D, и с 3D, запускается в браузере и предлагает детерминированный режим, что делает его привлекательным для многопользовательских игр, где состояние физики должно оставаться синхронным.

Как настроить симуляцию 2D-физики

Рабочая симуляция строится за четыре шага. Если правильно выполнить первый, большинство проблем исчезает.

  1. Сначала задайте масштаб мира. Решите, сколько пикселей составляют один метр, до того как тронете какое-либо значение. Box2D лучше всего работает с движущимися объектами размером примерно от 0,1 до 10 метров. Если спрайт игрока ростом 64 пикселя изображает человека, используйте 64 px = 1 м. Одно это решение убирает ту самую «ватную» и вялую физику, которая губит большинство первых попыток.
  2. Правильно назначьте типы тел. Если объект реагирует на физику — он динамический. Если это постоянная декорация — статический. Если вы двигаете его сами, но он должен толкать другие тела (движущаяся платформа) — кинематический. Путаница здесь — источник большинства жалоб вида «моя платформа дёргается».
  3. Начните с разумных значений. Плотность около 1,0 (вода), трение 0,3–0,5 для обычных поверхностей, упругость 0,0–0,2 для большинства объектов и 0,8 и выше для прыгучих. Дальше настраивайте на ощущение.
  4. Запускайте физику с фиксированным шагом. Физика должна шагать с постоянной частотой — по умолчанию в Unity это 50 шагов в секунду, — независимо от частоты кадров. Привяжите её к кадровому циклу, и игра будет вести себя по-разному на экранах 60 и 144 Гц.

О том, как устроен цикл настройки — как менять массу, трение и гравитацию и сразу видеть результат, — читайте в материале про редактор физики в реальном времени. А если вы только знакомитесь с базовыми идеями, в руководстве по основам геймдизайна рассказано, как физика вписывается в общий цикл прототипирования и плейтестинга.

Частые ошибки

Большинство сломанных 2D-симуляций возникает из одного и того же короткого списка.

ОшибкаЧто происходитКак исправить
Пиксели вместо метровОбъекты оказываются огромными для физики, гравитация почти их не сдвигает, всё медленное и невесомоеПереводите пиксели в метры и держите движущиеся тела в диапазоне 0,1–10 м
Перемещение статического телаДёрганье, телепорты, отказ корректно сталкиватьсяИспользуйте кинематическое тело для всего, что двигаете вручную
Создание связей каждый кадрСотни связей за секунды, скачки памяти, паденияСоздавайте связи один раз, при старте сцены
Игнорирование затуханияОбъекты крутятся и скользят бесконечно, словно в вакуумеДобавьте небольшое линейное и угловое затухание (около 0,01–0,1)
Привязка физики к частоте кадровПоведение меняется между устройствами и частотами кадровДержите физику на фиксированном шаге

Ошибку с масштабом стоит выделить особо: никакая подстройка отдельных тел её не исправит, потому что внутренняя математика решателя рассчитана на метры. Задайте масштаб правильно с самого начала — и остальная настройка пойдёт легко.

Движки физики за пределами игр

Физические движки давно вышли за рамки развлечений. В робототехнике и исследованиях искусственного интеллекта симуляторы тренируют алгоритмы манипуляции и передвижения в виртуальных песочницах, прежде чем что-либо коснётся реального железа: MuJoCo, открытый Google DeepMind, стал стандартом для обучения с подкреплением. В инженерии такие инструменты, как Project Chrono, проводят мультифизические симуляции и проверяют механические конструкции до дорогостоящей реальной прототипизации. Для этих задач важнее всего детерминированность — точное повторение результата при тех же входных данных, — и движки для критически важных применений выбирают не те, что для игр.

Где место Egmatic

2D-физический движок мощен, но его настройка остаётся циклом: поменял значение — пересобрал — посмотрел — повторил. В Egmatic 2D-физика встроена прямо в редактор, поэтому можно сдвинуть контур столкновения, усилить гравитацию или изменить трение и тут же увидеть, как симуляция отреагирует, — без пересборки и без очередного прохода через сборку. Это превращает свойственную физике настройку на ощущение в нечто ближе к живому редактированию. А в сочетании с редактированием сцен в том же инструменте весь 2D-рабочий процесс — дизайн, логика, физика — остаётся в одном быстром цикле.

Заключение

Движок 2D-физики симулирует твёрдые тела на плоскости: прикладывает силы, учитывает их в движении и находит и разрешает столкновения через схему «широкая фаза, затем узкая». Стандарт — Box2D, и Unity с GDevelop уже работают на нём, а Godot поставляется с собственным движком. Какой именно движок вы используете, менее важно, чем два решения: правильно задать масштаб мира, чтобы решатель работал в привычных ему метрах, и держать физику на фиксированном шаге, чтобы она вела себя стабильно. Добейтесь этого — и всё остальное, типы тел, материалы, связи, столкновения, займёт свои места.


Источники

  1. Box2D — бесплатный открытый 2D-физический движок твёрдого тела, созданный Эрином Катто и выпущенный под лицензией MIT — Box2D.org и Википедия: Box2D
  2. Box2D настроен на метры и лучше всего работает с движущимися телами размером примерно от 0,1 до 10 метров; не используйте пиксели как единицы — Box2D FAQ
  3. 2D-физика в Unity работает на Box2D; в Unity 6.3 появилась низкоуровневая 2D-физика на базе Box2D версии 3 — Unity Discussions: Low-level 2D Physics in Unity 6.3 и Unity 2D Physics (Box2D): importance of scale
  4. 2D-физика в Godot по умолчанию работает на собственном движке (Godot Physics 2D / PhysicsServer2D); Box2D доступен только как стороннее дополнение — Godot, задача #10592: Box2D physics engine implementation и дополнение godot-box2d
  5. Rapier — открытый физический движок для 2D и 3D на Rust со сборкой в WebAssembly и детерминированным режимом — Rapier.rs и @dimforge/rapier2d-deterministic в npm
  6. Chipmunk2D — лёгкая библиотека 2D-физики твёрдого тела на C под лицензией MIT — Chipmunk2D
  7. Мировой рынок игровых движков в 2024 году оценён примерно в 3 072,6 млн долларов и к 2030 году достигнет 8 345,2 млн долларов при среднегодовом росте 18,4% — Grand View Research: Game Engines Market
  8. Непрерывное обнаружение столкновений (CCD) не даёт быстро движущимся объектам проскакивать сквозь тонкие поверхности; в Box2D оно поддерживается — Box2D на GitHub
  9. Unity считает физику с фиксированным шагом (по умолчанию 0,02 с, то есть 50 Гц), независимо от частоты кадров — Руководство Unity: Time and Fixed Timestep
  10. MuJoCo — открытый физический симулятор, широко применяемый в робототехнике и обучении с подкреплением — MuJoCo

Похожие статьи

instrumenty-prototipirovaniyarazrabotka-igrbystroe-prototipirovanie

10 лучших инструментов для быстрого прототипирования игр (2026)

Правильный инструмент для прототипирования сокращает недели разработки. Вот 10 инструментов, отобранных по скорости, стоимости и пригодности для прототипирования 2D-игр — от no-code движков до профессиональных фреймворков.

8 июня 2026 г.15 мин
monogamecsharp-razrabotka-igrluchshie-instrumenty

8 главных инструментов MonoGame, которыми пользуется каждый профи

MonoGame — это C#-фреймворк, а не готовый движок, поэтому профессиональные разработчики закрывают недостающее проверенным набором инструментов. Восемь самых ходовых: конвейер контента MGCB, библиотеки MonoGame.Extended и Nez для недостающих возможностей движка, FlatRedBall с GUM как движок и редактор интерфейса, Aseprite и MonoGame.Aseprite для спрайтов, Tiled и LDtk для уровней и TexturePacker для атласов. В руководстве объяснено, что делает каждый инструмент и как они сочетаются.

19 июня 2026 г.11 мин
buildboxalternativy-buildboxigrovoj-dvizhok

Buildbox против конкурентов: честное сравнение 2026

Buildbox позволяет создавать игры без программирования, но делёж рекламной выручки 70/30 и отсутствие экспорта на консоли делают его трудно рекомендуемым. Честное сравнение с Construct 3, GDevelop, GameMaker, Godot и Egmatic.

8 июня 2026 г.15 мин