Содержание статьи

Rigidbody2D – это компонент Unity, который отвечает за физическое поведение 2D-объектов. Он позволяет объектам реагировать на силы, столкновения и гравитацию, создавая реалистичное движение без ручного расчёта координат.
При работе с Rigidbody2D важно понимать различие между динамическими и кинематическими телами. Динамическое тело полностью подчиняется законам физики и реагирует на силы и столкновения, тогда как кинематическое управляется напрямую скриптами, игнорируя внешние воздействия, но сохраняя возможность обнаружения столкновений.
Настройка массы, гравитации, линейного и углового сопротивления напрямую влияет на поведение объекта. Например, увеличение массы замедляет ускорение при приложении силы, а высокий линейный драг снижает скорость движения при отсутствии внешних воздействий.
Rigidbody2D также предоставляет возможности для управления движением через скрипты. Использование методов AddForce, AddTorque и прямого изменения velocity позволяет реализовать прыжки, толчки и вращения с точным контролем над физикой.
Rigidbody2D в Unity: как работает и управляется
Rigidbody2D обеспечивает физическое поведение 2D-объектов, позволяя реагировать на силы, столкновения и гравитацию. Он управляет скоростью, ускорением и вращением объекта с учётом массы и сопротивления.
Основные параметры Rigidbody2D:
- Mass – масса объекта, определяет инерцию при движении и отклик на силы.
- Gravity Scale – множитель гравитации, регулирует влияние сцены на объект.
- Linear Drag – сопротивление линейному движению, уменьшает скорость при отсутствии сил.
- Angular Drag – сопротивление вращению, замедляет вращение при отсутствии момента силы.
- Body Type – динамическое, кинематическое или статическое, определяет способ взаимодействия с физикой.
Методы управления движением:
- AddForce(Vector2 force, ForceMode2D mode) – применяет силу к объекту, создаёт ускорение или мгновенный импульс.
- AddTorque(float torque) – добавляет вращательный момент, изменяет угловую скорость.
- velocity – прямое задание скорости объекта, позволяет контролировать движение без применения сил.
- MovePosition(Vector2 position) – безопасное перемещение объекта к указанной точке, учитывающее столкновения.
- MoveRotation(float angle) – поворот объекта на заданный угол, учитывая физику сцены.
Для точного управления Rigidbody2D важно учитывать сочетание параметров массы, гравитации и сопротивления. Например, для прыжков рекомендуется динамическое тело с нормальной массой и небольшой линейной и угловой задержкой. Для платформ и движущихся объектов, управляемых скриптами, лучше использовать кинематическое тело и методы MovePosition/MoveRotation.
Настройка Rigidbody2D и основные параметры

Rigidbody2D имеет несколько ключевых параметров, которые напрямую влияют на поведение объекта в физическом мире Unity. Правильная настройка позволяет добиться требуемой динамики и контроля движения.
Body Type определяет способ взаимодействия объекта с физикой:
- Dynamic – объект полностью подчиняется законам физики, реагирует на силы и столкновения.
- Kinematic – движение задаётся скриптами, столкновения фиксируются, но внешние силы игнорируются.
- Static – неподвижный объект, участвует в столкновениях, но не движется.
Mass задаёт массу объекта и влияет на инерцию. Для тяжёлых объектов требуются большие силы для изменения скорости, лёгкие объекты реагируют быстрее.
Gravity Scale регулирует влияние гравитации на объект. Значение 1 соответствует стандартной гравитации сцены, 0 полностью отключает действие гравитации, значения больше 1 усиливают падение.
Linear Drag контролирует сопротивление линейному движению. Высокое значение замедляет объект быстрее, низкое позволяет долго сохранять скорость.
Angular Drag отвечает за сопротивление вращению. При настройке вращающихся объектов рекомендуется подбирать значение, чтобы они не вращались бесконтрольно после приложения момента силы.
Правильное сочетание этих параметров зависит от задач: динамические персонажи лучше с массой 1–3, Gravity Scale 1 и небольшим линейным драгом; движущиеся платформы часто используют кинематический тип с нулевым гравитационным воздействием.
Различие между кинематическим и динамическим телом

В Rigidbody2D существует два активных типа тел: Dynamic и Kinematic, каждый из которых имеет конкретное применение в игровом процессе.
Dynamic тело полностью подчиняется законам физики. Оно реагирует на гравитацию, силы и столкновения. Для изменения позиции или скорости такого объекта используют методы AddForce или прямое изменение velocity. Динамическое тело подходит для персонажей, снарядов и объектов, которые должны естественно взаимодействовать с окружением.
Kinematic тело игнорирует внешние силы и гравитацию, но регистрирует столкновения с другими объектами. Движение управляется напрямую через скрипты с использованием MovePosition и MoveRotation. Такой тип удобен для платформ, дверей, лифтов и объектов с заранее заданной траекторией.
При выборе типа важно учитывать взаимодействие с другими Rigidbody2D. Dynamic объект может толкать кинематические и статические тела, тогда как кинематическое тело не влияет на динамические объекты через физику, кроме детекции столкновений.
Рекомендация: использовать Dynamic для объектов, где важна физическая реакция на силы, и Kinematic для управляемых скриптами объектов, где требуется точная позиция и контроль движения.
Применение силы и импульсов к Rigidbody2D

Для управления движением динамических объектов Rigidbody2D используются силы и импульсы. Метод AddForce(Vector2 force, ForceMode2D mode) позволяет применять постоянное или мгновенное воздействие на объект. Параметр ForceMode2D.Force создаёт постепенное ускорение, ForceMode2D.Impulse мгновенно изменяет скорость, имитируя толчок.
Применение момента силы осуществляется через AddTorque(float torque), что изменяет угловую скорость и позволяет вращать объекты. Для контроля направления вращения учитывайте знак значения: положительное вращение по часовой стрелке, отрицательное – против.
Прямое изменение velocity обеспечивает мгновенное задание скорости без учёта постепенного ускорения. Этот метод удобен для точного позиционирования объектов, но игнорирует силы и сопротивление, поэтому рекомендуется использовать совместно с физическими параметрами объекта.
Практические рекомендации:
- Для прыжков и отталкиваний используйте Impulse с учётом массы объекта.
- Для ускорения персонажа по поверхности лучше применять AddForce с Force и корректировать Linear Drag.
- Для вращающихся платформ задавайте AddTorque и контролируйте Angular Drag для плавного замедления.
Использование гравитации и её настройка

В Rigidbody2D гравитация влияет на вертикальное движение объекта, задавая ускорение вниз. Основной параметр для настройки – Gravity Scale. Значение 1 соответствует стандартному ускорению свободного падения Unity (9.81 м/с²). Значения выше 1 усиливают гравитацию, ниже 1 ослабляют. Значение 0 полностью отключает воздействие гравитации.
Пример настройки через инспектор:
| Параметр | Описание | Пример значения |
|---|---|---|
| Gravity Scale | Множитель гравитации на объекте | 0, 0.5, 1, 2 |
| Mass | Масса объекта, влияет на взаимодействие с силами | 1, 3, 5 |
| Linear Drag | Сопротивление движению, уменьшает скорость падения | 0, 0.1, 0.5 |
Через код Rigidbody2D.gravityScale можно изменять гравитацию динамически. Например:
rigidbody2D.gravityScale = 0.5f;
Для платформеров или игр с низкой гравитацией рекомендуется выбирать значения < 1, чтобы объекты падали медленнее и движение выглядело более плавным. Для реалистичной физики – около 1. Для ускоренного падения или эффекта «тяжести» – 2 и выше.
Если необходимо временно отключить гравитацию, достаточно установить gravityScale в 0. Это полезно для полета, плавания или телепортации объектов, когда стандартная физика не нужна.
Также стоит учитывать взаимодействие с массой и drag. При высокой массе объект быстрее набирает скорость под действием гравитации, а drag замедляет это ускорение. Правильное сочетание этих параметров позволяет точно контролировать поведение объекта в 2D пространстве.
Ограничение движения и вращения Rigidbody2D

Rigidbody2D позволяет управлять ограничениями движения и вращения через компонент Constraints. Это важно для сохранения стабильности объектов, предотвращения нежелательных смещений или переворотов.
Основные параметры ограничения:
- Freeze Position X – блокирует горизонтальное перемещение.
- Freeze Position Y – блокирует вертикальное перемещение.
- Freeze Rotation Z – блокирует вращение вокруг оси Z (в 2D пространстве это единственная ось вращения).
Примеры применения:
- Платформер: ограничение по X для объектов, которые должны оставаться на одной линии.
- Игровые персонажи: блокировка вращения Z предотвращает переворот при столкновениях.
- Фоновые объекты: полная блокировка позиции и вращения сохраняет статичность.
Через код ограничения задаются с помощью Rigidbody2D.constraints:
rigidbody2D.constraints = RigidbodyConstraints2D.FreezePositionX;rigidbody2D.constraints = RigidbodyConstraints2D.FreezeRotation;rigidbody2D.constraints = RigidbodyConstraints2D.FreezePosition | RigidbodyConstraints2D.FreezeRotation;– полная фиксация.
Комбинирование ограничений позволяет точно контролировать поведение объектов:
- Блокировка только X или Y позволяет создавать объекты, движущиеся в одном направлении.
- Фиксация вращения важна для платформ, коробок и персонажей с физическим взаимодействием.
- Полная фиксация используется для статических или декоративных элементов сцены.
Взаимодействие с коллайдерами и физикой сцены

Rigidbody2D взаимодействует с другими объектами через коллайдеры. Любой Collider2D, прикрепленный к объекту, определяет форму столкновения и участвует в расчетах физики.
Типы коллайдеров:
- BoxCollider2D – прямоугольная форма, подходит для платформ и стен.
- CircleCollider2D – круглая форма, удобно использовать для шаров, пуль или персонажей.
- PolygonCollider2D – произвольная форма, точнее повторяет контур сложных объектов.
- EdgeCollider2D – линия или цепочка, полезна для пола, рельефа или границ сцены.
Rigidbody2D реагирует на физические силы, столкновения и триггеры. Основные моменты:
- Для физических столкновений оба объекта должны иметь Collider2D. Один из них должен быть Rigidbody2D.
- Если один объект имеет Rigidbody2D с IsKinematic = true, он не будет реагировать на физические силы, но сможет вызывать события столкновений.
- Trigger Collider не блокирует движение, но вызывает события
OnTriggerEnter2D,OnTriggerExit2DиOnTriggerStay2D.
Настройки взаимодействия через Physics2D:
- Collision Layer – позволяет задавать, какие слои могут сталкиваться между собой.
- Physics Material 2D – настраивает коэффициенты трения и отскока при столкновениях.
- Queries Start In Colliders – определяет, учитываются ли коллайдеры при проверке Raycast и Overlap.
Рекомендации по производительности:
- Минимизировать количество полигональных коллайдеров на динамических объектах.
- Использовать простые формы (Box, Circle) для частых столкновений.
- Сочетать Rigidbody2D с корректными массой, drag и gravityScale для естественного поведения.
Управление Rigidbody2D через скрипты C#

Для управления Rigidbody2D через код используется компонент Rigidbody2D, доступ к которому получают через GetComponent<Rigidbody2D>() или через публичное поле.
Пример получения ссылки на Rigidbody2D:
private Rigidbody2D rb;
void Start() { rb = GetComponent<Rigidbody2D>(); }
Основные методы управления движением:
- rb.velocity – задает скорость объекта напрямую. Используется для мгновенного изменения направления или ускорения.
- rb.AddForce(Vector2 force, ForceMode2D mode) – применяет силу к объекту. ForceMode2D.Force учитывает массу, ForceMode2D.Impulse – мгновенный импульс.
- rb.MovePosition(Vector2 position) – перемещает объект в заданную позицию с учетом физики, безопасно для FixedUpdate.
- rb.MoveRotation(float angle) – вращение объекта на определенный угол с учетом физических ограничений.
Пример перемещения с ускорением:
Vector2 direction = new Vector2(1, 0);
rb.AddForce(direction * 5f, ForceMode2D.Force);
Изменение гравитации и ограничений через скрипт:
rb.gravityScale = 0.5f;– уменьшение воздействия гравитации.rb.constraints = RigidbodyConstraints2D.FreezeRotation;– блокировка вращения.
Рекомендации по обновлению Rigidbody2D в коде:
- Использовать FixedUpdate() для применения физических сил и перемещений.
- Избегать изменения позиции через
transform.positionу объектов с Rigidbody2D, чтобы не нарушать физический расчет. - Для динамического управления скоростью лучше комбинировать velocity и AddForce, учитывая массу и drag.
Вопрос-ответ:
Что такое Rigidbody2D и зачем он нужен в Unity?
Rigidbody2D — это компонент, который позволяет объектам взаимодействовать с физикой 2D-сцены. Он управляет движением, ускорением, гравитацией и столкновениями. Без Rigidbody2D объект не будет реагировать на силы, столкновения или гравитацию, даже если у него есть коллайдер.
Как настроить гравитацию для Rigidbody2D?
Гравитация настраивается через параметр Gravity Scale. Значение 1 соответствует стандартной гравитации Unity. Увеличение значения усиливает падение объекта, уменьшение замедляет. Значение 0 полностью отключает влияние гравитации. Дополнительно на скорость падения влияют Mass и Linear Drag.
Какие ограничения движения можно задать для Rigidbody2D?
Через компонент Constraints можно зафиксировать движение по осям X или Y и заблокировать вращение по оси Z. Это полезно для платформ, персонажей и объектов, которым нельзя переворачиваться или смещаться в определенном направлении. Ограничения можно задавать как в инспекторе, так и через код.
Как правильно управлять Rigidbody2D через скрипты C#?
Для работы с Rigidbody2D в коде используют ссылку на компонент через GetComponent. Основные методы управления: изменение velocity для мгновенного движения, AddForce для воздействия силой и MovePosition с MoveRotation для плавного перемещения и вращения. Все физические изменения следует делать в FixedUpdate(), чтобы не нарушать расчеты движка.
Как Rigidbody2D взаимодействует с коллайдерами и триггерами?
Для физических столкновений оба объекта должны иметь Collider2D, один из которых обычно содержит Rigidbody2D. При столкновении движок рассчитывает силы, импульсы и отскок. Если Collider2D установлен как Trigger, он не блокирует движение, но вызывает события OnTriggerEnter2D, OnTriggerStay2D и OnTriggerExit2D. Через слои и Physics Material 2D можно настраивать взаимодействие и трение между объектами.
Как правильно применять силы и скорость к Rigidbody2D через скрипты C#?
Для управления Rigidbody2D через код используют velocity и AddForce. velocity задает мгновенную скорость объекта, игнорируя массу, и подходит для прямого управления движением, например при перемещении персонажа. AddForce добавляет силу с учетом массы и сопротивления, создавая естественные ускорения и замедления. Использование FixedUpdate() необходимо для согласованной работы с физикой. Комбинация этих методов позволяет управлять прыжками, толчками и динамикой объектов без нарушения расчетов движка.
