Компонент RigidBody: типы тел, масса, трение, упругость

В PlayCanvas компонент RigidBody отвечает за физическое поведение объекта в мире. Он связывает объект с системой физики, обеспечивая такие характеристики, как движение, столкновения, масса, трение и упругость. Важно понимать, как различные параметры компонента влияют на поведение объекта в игровом мире.

Типы тел

В PlayCanvas компонент RigidBody поддерживает несколько типов тел, которые определяют, как объект взаимодействует с другими объектами в системе физики.

  1. Тип: Статическое тело Статические тела не движутся в игровом мире. Это объекты, которые не подвержены силам и не могут быть перемещены в процессе игры. Они используются для создания таких объектов, как стены, земля, здания и другие элементы, которые остаются на месте. Статическое тело не имеет массы, и его положение в пространстве фиксировано.

    • Пример использования: создание препятствий или элементов окружения, которые не должны двигаться.
  2. Тип: Динамическое тело Динамические тела могут свободно перемещаться и вращаться, они подвержены воздействию физических сил (гравитации, столкновений и т. д.). Этот тип используется для большинства движущихся объектов, таких как машины, персонажи или любые другие объекты, которые должны взаимодействовать с окружающей средой.

    • Пример использования: персонажи, транспортные средства, предметы, которые должны двигаться по сцене и взаимодействовать с другими объектами.
  3. Тип: Кинематическое тело Кинематические тела управляются напрямую через код (например, задаются вручную через изменения позиции или угла наклона). Эти объекты не подвержены воздействию физических сил, но при столкновении с другими объектами могут создавать реакции, такие как отскок. Кинематические тела используются в тех случаях, когда необходимо контролировать движение объекта программно, но при этом учитывать физику столкновений.

    • Пример использования: платформы, движущиеся с определенной скоростью или объект, перемещаемый по заранее заданным траекториям.

Масса

Масса объекта в контексте физики влияет на его инерцию, сопротивление движению и взаимодействие с другими объектами. В PlayCanvas масса задается через параметр mass в компоненте RigidBody. Масса должна быть положительным числом, и она оказывает влияние на то, как объект будет реагировать на силы и столкновения.

  • Масса равна нулю — в случае, если масса объекта равна нулю, объект становится невесомым и не будет взаимодействовать с силами, такими как гравитация. Это полезно для создания объектов, которые должны оставаться в воздухе или не участвовать в физическом взаимодействии.

  • Масса больше нуля — чем больше масса объекта, тем меньше его скорость изменения при воздействии силы. Например, тяжелый объект будет двигаться медленнее, чем легкий при одинаковых приложенных силах.

Масса также важна при расчетах столкновений. В PlayCanvas, если два объекта с разной массой сталкиваются, более тяжелый объект будет меньше изменять свою скорость, чем легкий.

Коэффициент трения

Трение — это сила, которая препятствует движению объектов, контактирующих друг с другом. В PlayCanvas компонент RigidBody позволяет настроить коэффициент трения, который контролирует, насколько сильно объект будет замедляться при контакте с поверхностью.

Параметр трения определяется через friction и влияет на следующие аспекты:

  • Трение между поверхностями — чем выше коэффициент трения, тем сильнее будет замедляться объект при движении по другой поверхности. Это важный аспект при моделировании взаимодействий между колесами и дорогой, персонажами, бегущими по земле, или любыми другими скользящими объектами.

  • Сила трения — этот параметр зависит не только от коэффициента трения, но и от силы взаимодействия между объектами. Трение не является постоянной величиной, оно может изменяться в зависимости от скорости объекта. Например, если объект двигается слишком быстро, трение может снижаться, что делает его скольжение более естественным.

Упругость

Упругость описывает способность объекта восстанавливать свою форму после деформации, то есть его способность к “отскоку”. В PlayCanvas упругость задается через параметр restitution, который контролирует, насколько сильно объект будет отскакивать от других объектов при столкновении.

  • Значение 0 — если значение упругости равно нулю, объект не отскакивает. При столкновении он останется на месте, и не будет подниматься или двигаться дальше. Это часто используется для создания объектов, которые должны поглощать силу удара, например, при моделировании мягких поверхностей.

  • Значение 1 и выше — при значении упругости, равном 1, объект будет отскакивать идеально, как мяч. Он сохраняет свою скорость после столкновения, но направление может изменяться в зависимости от угла удара. Значение выше 1 будет означать, что объект будет отскакивать еще сильнее, что может использоваться, например, в ситуациях, где нужно имитировать высокоупругие материалы.

Важным моментом является то, что упругость работает вместе с коэффициентом трения, который может уменьшить или усилить эффект отскока в зависимости от ситуации.

Влияние на взаимодействие объектов

Компонент RigidBody играет ключевую роль в взаимодействии объектов с другими элементами сцены. Например, когда два динамических объекта с компонентами RigidBody сталкиваются, их поведение будет зависеть от массы, трения и упругости. Объекты с низкой массой, высоким коэффициентом трения и малой упругостью будут взаимодействовать по-другому, чем объекты с высокой массой и высокой упругостью.

Пример настройки компонента RigidBody

var entity = new pc.Entity();

// Добавление компонента RigidBody
entity.addComponent('rigidbody', {
    type: 'dynamic',        // Тип тела - динамическое
    mass: 10,               // Масса объекта
    friction: 0.5,          // Коэффициент трения
    restitution: 0.8        // Упругость
});

// Добавление компонента коллайдера для взаимодействия с физикой
entity.addComponent('collider', {
    type: 'box',            // Тип коллайдера - коробка
    halfExtents: new pc.Vec3(1, 1, 1)  // Размеры коллайдера
});

// Добавление объекта на сцену
app.root.addChild(entity);

В данном примере создается динамическое тело с массой 10, коэффициентом трения 0.5 и упругостью 0.8. Такие параметры обеспечат стандартное взаимодействие с физическим миром. С помощью компонента коллайдера объект будет способен взаимодействовать с другими объектами, а его поведение будет учитывать все физические свойства, заданные в RigidBody.

Заключение

Настройка компонента RigidBody в PlayCanvas позволяет детально управлять физическим поведением объектов в игре. Правильный выбор типа тела, массы, трения и упругости позволяет добиться реалистичных и ожидаемых эффектов столкновений, движения и взаимодействия объектов.