← Назад
Наследует: PhysicsBody < CollisionObject < Spatial < Node < Object
Унаследовано: VehicleBody
Физическое тело, положение которого определяется с помощью физического моделирования в 3D-пространстве.
Это узел, который реализует полную 3D-физику. Это означает, что вы не управляете RigidBody напрямую. Вместо этого вы можете применить к нему силы (гравитацию, импульсы и т. д.), а физическое моделирование рассчитает результирующее движение, столкновение, отскок, вращение и т. д.
RigidBody имеет 4 mode:
Примечание: Не меняйте положение RigidBody каждый кадр или очень часто. Спорадические изменения работают нормально, но физика работает с другой степенью детализации (фиксированная Гц), чем обычный рендеринг (обратный вызов процесса) и, возможно, даже в отдельном потоке, поэтому изменение этого из цикла процесса может привести к странному поведению. Если вам нужно напрямую повлиять на состояние тела, используйте _integrate_forces, который позволяет вам напрямую получить доступ к физическому состоянию.
Если вам нужно переопределить поведение физики по умолчанию, вы можете написать пользовательскую функцию интеграции силы. См. custom_integrator.
С Bullet physics (по умолчанию) центром масс является центр RigidBody3D. В GodotPhysics центр масс - это среднее CollisionShape центров формы столкновения.
Тип | Свойство | По умолчанию |
---|---|---|
float | angular_damp | -1.0 |
Vector3 | angular_velocity | Vector3( 0, 0, 0 ) |
bool | axis_lock_angular_x | false |
bool | axis_lock_angular_y | false |
bool | axis_lock_angular_z | false |
bool | axis_lock_linear_x | false |
bool | axis_lock_linear_y | false |
bool | axis_lock_linear_z | false |
float | bounce | |
bool | can_sleep | true |
bool | contact_monitor | false |
int | contacts_reported | 0 |
bool | continuous_cd | false |
bool | custom_integrator | false |
float | friction | |
float | gravity_scale | 1.0 |
float | linear_damp | -1.0 |
Vector3 | linear_velocity | Vector3( 0, 0, 0 ) |
float | mass | 1.0 |
Mode | mode | 0 |
PhysicsMaterial | physics_material_override | |
bool | sleeping | false |
float | weight | 9.8 |
Тип | Метод |
---|---|
void | _integrate_forces ( PhysicsDirectBodyState state ) virtual |
void | add_central_force ( Vector3 force ) |
void | add_force ( Vector3 force, Vector3 position ) |
void | add_torque ( Vector3 torque ) |
void | apply_central_impulse ( Vector3 impulse ) |
void | apply_impulse ( Vector3 position, Vector3 impulse ) |
void | apply_torque_impulse ( Vector3 impulse ) |
bool | get_axis_lock ( BodyAxis axis ) const |
Array | get_colliding_bodies ( ) const |
Basis | get_inverse_inertia_tensor ( ) |
void | set_axis_lock ( BodyAxis axis, bool lock ) |
void | set_axis_velocity ( Vector3 axis_velocity ) |
body_entered ( Node body )
Излучается при столкновении с другим PhysicsBody или GridMap. Требуется,
чтобы contact_monitor был установлен в true
значение
и contacts_reported был установлен достаточно высоко, чтобы обнаружить все столкновения.
GridMap обнаруживаются, если MeshLibrary имеет Shape столкновения.
body
Node, если он существует в дереве, другого PhysicsBody или GridMap.
body_exited ( Node body )
Испускается, когда заканчивается столкновение с другим PhysicsBody или GridMap.
Требуется, чтобы contact_monitor был установлен в true
значение
и contacts_reported был установлен достаточно высоко, чтобы обнаружить все столкновения.
GridMap обнаруживаются, если MeshLibrary имеет Shape столкновения.
body
Node, если он существует в дереве, другого PhysicsBody или GridMap.
body_shape_entered ( RID body_rid, Node body, int body_shape_index, int local_shape_index )
Испускается, когда одна из Shapes этого твердого тела сталкивается с другой PhysicsBody
или GridMap фигурой. Требуется, чтобы contact_monitor был установлен в true
значение и contacts_reported был установлен достаточно высоко, чтобы обнаружить все
столкновения.
GridMap обнаруживаются, если MeshLibrary имеет Shape столкновения.
body_rid
избавление от другого [объекта](physicsbody.md physicsBody
или MeshLibrary CollisionObject,
используемого PhysicsServer.
body
Node, если он существует в дереве, другого PhysicsBody или GridMap.
body_shape_index
индекс формы другого [физического](physicsbody.md тела или GridMap,
используемого физическим сервером. Получить
узел body.shape_owner_get_owner(body_shape_index)
CollisionShape.
local_shape_index
индекс формы этого твердого тела, используемый
сервером PhysicsServer. Получить
узел self.shape_owner_get_owner(local_shape_index)
CollisionShape.
Примечание: Физика пули не может определить индекс формы при использовании ConcavePolygonShape. Не используйте несколько CollisionShape при использовании ConcavePolygonShape с физикой пули, если вам нужны индексы формы.
body_shape_exited ( RID body_rid, Node body, int body_shape_index, int local_shape_index )
Испускается, когда заканчивается столкновение между одной из форм s этого твердоготела и
другой формой s physicsBody или GridMap.
Требуется , чтобы contact_monitor был установлен в true
значение
и contacts_reported был установлен достаточно высоко, чтобы обнаружить все столкновения.
GridMap обнаруживаются, если MeshLibrary имеет форму столкновения.
body_rid
избавление от другого [объекта](physicsbody.md physicsBody
или MeshLibrary CollisionObject ,
используемого PhysicsServer.
GridMaps обнаруживаются, если сетки имеют форму.
body
узел, если он существует в дереве, другого physicsBody или GridMap.
body_shape_index
индекс формы другого физического тела или GridMap,
используемого физическим сервером. Получить
узел body.shape_owner_get_owner(body_shape_index)
CollisionShape.
local_shape_index
индекс формы этого твердого тела, используемый
сервером PhysicsServer. Получить
узел self.shape_owner_get_owner(local_shape_index)
CollisionShape.
Примечание: Физика пули не может определить индекс формы при использовании ConcavePolygonShape. Не используйте несколько CollisionShape при использовании ConcavePolygonShape с физикой пули, если вам нужны индексы формы.
sleeping_state_changed ( )
Излучается, когда физический движок изменяет состояние сна тела.
Примечание: Изменение значения Sleeping не вызовет этот сигнал. Он излучается только в том
случае, если спящее состояние изменяется физическим движком или emit_signal("sleeping_state_changed")
используется.
режим перечисления:
MODE_RIGID = 0 - Режим жесткого тела. Это “естественное” состояние твердого тела. Он подвержен воздействию сил и может перемещаться, вращаться и зависеть от кода пользователя.
MODE_STATIC = 1 - Статический режим. Тело ведет себя как статическоетело и может перемещаться только по пользовательскому коду.
MODE_CHARACTER = 2 - Режим тела персонажа. Это ведет себя как твердое тело, но не может вращаться.
MODE_KINEMATIC = 3 - Режим кинематического тела. Тело ведет себя как кинематическоетело и может двигаться только по пользовательскому коду.
float angular_damp
По умолчанию | -1.0 |
---|---|
Setter | set_angular_damp(value) |
Getter | get_angular_damp() |
Гасит вращательные силы RigidBody.
См. ProjectSettings.physics/3d/default_angular_damp для получения более подробной информации о демпфировании.
Vector3 angular_velocity
По умолчанию | Vector3( 0, 0, 0 ) |
---|---|
Setter | set_angular_velocity(value) |
Getter | get_angular_velocity() |
Скорость вращения тела в формате axis-angle. Величина вектора-это скорость вращения в радианах в секунду.
bool axis_lock_angular_x
По умолчанию | false |
---|---|
Setter | set_axis_lock(value) |
Getter | get_axis_lock() |
Зафиксируйте вращение корпуса по оси X.
bool axis_lock_angular_y
По умолчанию | false |
---|---|
Setter | set_axis_lock(value) |
Getter | get_axis_lock() |
Зафиксируйте вращение корпуса по оси Y.
bool axis_lock_angular_z
По умолчанию | false |
---|---|
Setter | set_axis_lock(value) |
Getter | get_axis_lock() |
Зафиксируйте вращение тела по оси Z.
bool axis_lock_linear_x
По умолчанию | false |
---|---|
Setter | set_axis_lock(value) |
Getter | get_axis_lock() |
Зафиксируйте движение тела по оси X.
bool axis_lock_linear_y
По умолчанию | false |
---|---|
Setter | set_axis_lock(value) |
Getter | get_axis_lock() |
Зафиксируйте движение тела по оси Y.
bool axis_lock_linear_z
По умолчанию | false |
---|---|
Setter | set_axis_lock(value) |
Getter | get_axis_lock() |
Зафиксируйте движение тела по оси Z.
float bounce
По умолчанию | 0.0 |
---|---|
Setter | set_bounce(value) |
Getter | get_bounce() |
Упругость тела. Значения варьируются от 0
(no bounce) до 1
(full bounciness).
Устарело, используйте PhysicsMaterial.bounce вместо этого
через physics_material_override.
bool can_sleep
По умолчанию | true |
---|---|
Setter | set_can_sleep(value) |
Getter | is_able_to_sleep() |
Если true
тело может войти в спящий режим, когда нет движения. См. sleeping.
Примечание: RigidBody3D никогда не войдет в спящий режим автоматически, если
его mode MODE_CHARACTER. Его все еще можно перевести в спящий режим
вручную, установив его mode свойство на true
.
bool contact_monitor
По умолчанию | false |
---|---|
Setter | set_contact_monitor(value) |
Getter | is_contact_monitor_enabled() |
Если true
, то RigidBody будет излучать сигналы при столкновении с другим RigidBody.
См. также contacts_reported.
int contacts_reported
По умолчанию | 0 |
---|---|
Setter | set_max_contacts_reported(value) |
Getter | get_max_contacts_reported() |
Максимальное количество контактов, которые будут записаны. Требуется, чтобы contact_monitor
был установлен в true
.
Примечание: Количество контактов отличается от количества столкновений. Столкновения между параллельными ребрами приведут к двум контактам (по одному на каждом конце), а столкновения между параллельными гранями приведут к четырем контактам (по одному на каждом углу).
bool continuous_cd
По умолчанию | false |
---|---|
Setter | set_use_continuous_collision_detection(value) |
Getter | is_using_continuous_collision_detection() |
Если true
используется непрерывное обнаружение столкновений.
Continuous collision detection пытается предсказать, где столкнется движущееся тело, вместо того, чтобы перемещать его и
корректировать его движение, если оно столкнулось.
Непрерывное обнаружение столкновений является более точным и пропускает меньше ударов маленькими, быстро движущимися
объектами.
Не используя непрерывное обнаружение столкновений быстрее вычислять, но может пропустить небольшие, быстро движущиеся
объекты.
bool custom_integrator
По умолчанию | false |
---|---|
Setter | set_use_custom_integrator(value) |
Getter | is_using_custom_integrator() |
Если значение true
, интеграция внутренних сил будет отключена (например, гравитация или трение воздуха) для этого
тела. Помимо реакции на столкновение, тело будет перемещаться только так, как определено
функцией _integrate_forces, если она определена.
float friction
По умолчанию | 1.0 |
---|---|
Setter | set_friction(value) |
Getter | get_friction() |
Трение кузова, от 0 (без трения) до 1 (максимальное трение).
Устарело, используйте PhysicsMaterial.friction вместо этого через physics_material_override.
float gravity_scale
По умолчанию | 1.0 |
---|---|
Setter | set_gravity_scale(value) |
Getter | get_gravity_scale() |
Это умножается на глобальную настройку 3D gravity, найденную в Project > Project Settings > Physics > 3d для создания гравитации RigidBody. Например, значение 1 будет нормальной гравитацией, 2 будет применять двойную гравитацию, а 0.5 будет применять половину гравитации к этому объекту.
float linear_damp
По умолчанию | -1.0 |
---|---|
Setter | set_linear_damp(value) |
Getter | get_linear_damp() |
Линейная влажность тела. Не может быть меньше -1.0. Если это значение отличается от -1.0, любая линейная влажность, полученная из мира или областей, будет переопределена.
См. ProjectSettings.physics/3d/default_linear_damp для получения более подробной информации о демпфировании.
Vector3 linear_velocity
По умолчанию | Vector3( 0, 0, 0 ) |
---|---|
Setter | set_linear_velocity(value) |
Getter | get_linear_velocity() |
Линейная скорость тела в единицах в секунду. Может использоваться спорадически, но не устанавливайте это каждый кадр , потому что физика может работать в другом потоке и работать с другой степенью детализации. Используйте _integrate_forces в качестве технологического цикла для точного контроля состояния тела.
float mass
По умолчанию | 1.0 |
---|---|
Setter | set_mass(value) |
Getter | get_mass() |
Масса тела.
Mode mode
По умолчанию | 0 |
---|---|
Setter | set_mode(value) |
Getter | get_mode() |
Возможные значения см. Mode.
PhysicsMaterial physics_material_override
По умолчанию | null |
---|---|
Setter | set_physics_material_override(value) |
Getter | get_physics_material_override() |
Переопределение физического материала для тела. Если материалу присвоено это свойство, он будет использоваться вместо любого другого физического материала, например унаследованного.
bool sleeping
По умолчанию | false |
---|---|
Setter | set_sleeping(value) |
Getter | is_sleeping() |
Если true
тело не будет двигаться и не будет вычислять силы, пока его не разбудит другое тело, например, при
столкновении, или с помощью методов apply_impulse или add_force.
float weight
По умолчанию | 9.8 |
---|---|
Setter | set_weight(value) |
Getter | get_weight() |
Вес тела, основанный на его массе и глобальной 3D-гравитации. Глобальные значения задаются в Project > Project Settings > Physics > 3d.
void _integrate_forces ( PhysicsDirectBodyState state ) virtual
Вызывается во время обработки физики, позволяя считывать и безопасно изменять состояние моделирования для объекта. По умолчанию он работает в дополнение к обычному физическому поведению, но свойство custom_integrator позволяет отключить поведение по умолчанию и полностью настроить интеграцию силы для тела.
void add_central_force ( Vector3 force )
Добавляет постоянную направленную силу (т. е. Ускорение), не влияя на вращение. Это
эквивалентно add_force(force, Vector3(0,0,0))
.
void add_force ( Vector3 force, Vector3 position )
Добавляет постоянную направленную силу (т. е. Ускорение). Позиция использует вращение глобальной системы координат, но центрируется в начале координат объекта.
void add_torque ( Vector3 torque )
Добавляет постоянную вращательную силу (т. е. двигатель), не влияя на положение.
void apply_central_impulse ( Vector3 impulse )
Применяет направленный импульс, не влияя на вращение.
Это эквивалентно apply_impulse(Vector3(0,0,0), impulse)
.
void apply_impulse ( Vector3 position, Vector3 impulse )
Прикладывает позиционированный импульс к корпусу. Импульс не зависит от времени! Применение импульса к каждому кадру приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых воздействий. Позиция использует вращение глобальной системы координат, но центрируется в начале координат объекта.
void apply_torque_impulse ( Vector3 impulse )
Применяет импульс крутящего момента, который будет зависеть от массы и формы тела. Это будет вращать тело
вокруг impulse
переданного вектора.
bool get_axis_lock ( BodyAxis axis ) const
Возвращаетtrue
, если заданная линейная или вращательная ось заблокирована.
Array get_colliding_bodies ( ) const
Возвращает список тел, сталкивающихся с этим. Требуется, чтобы contact_monitor был
установлен в true
значение и contacts_reported был установлен достаточно высоко, чтобы
обнаружить все столкновения.
Примечание: Результат этого теста не сразу после перемещения объектов. Для производительности список столкновений обновляется один раз за кадр и перед шагом физики. Вместо этого рассмотрите возможность использования сигналов.
Basis get_inverse_inertia_tensor ( )
Возвращает базис обратного тензора инерции. Это используется для расчета углового ускорения, возникающего в результате крутящего момента, приложенного к жесткому телу.
void set_axis_lock ( BodyAxis axis, bool lock )
Фиксирует указанную линейную или вращательную ось.
void set_axis_velocity ( Vector3 axis_velocity )
Устанавливает скорость оси. Скорость на заданной векторной оси будет установлена как заданная длина вектора. Это полезно для прыжкового поведения.
← Назад