PhysicalBone3D

Наследует: PhysicsBody3D < CollisionObject3D < Node3D < Node < Object

Физическое тело, используемое для того, чтобы кости в Skeleton3D реагировали на физику.

Описание

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

Примечание: Для обнаружения физических костей с помощью raycasts свойство SkeletonModifier3D.active родительского PhysicalBoneSimulator3D должно быть true, а кость Skeleton3D должна быть правильно назначена PhysicalBone3D; это означает, что get_bone_id() должен возвращать действительный идентификатор (>= 0).

Обучающие материалы

Свойства

float

angular_damp

0.0

DampMode

angular_damp_mode

0

Vector3

angular_velocity

Vector3(0, 0, 0)

Transform3D

body_offset

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

float

bounce

0.0

bool

can_sleep

true

bool

custom_integrator

false

float

friction

1.0

float

gravity_scale

1.0

Transform3D

joint_offset

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

Vector3

joint_rotation

Vector3(0, 0, 0)

JointType

joint_type

0

float

linear_damp

0.0

DampMode

linear_damp_mode

0

Vector3

linear_velocity

Vector3(0, 0, 0)

float

mass

1.0

Методы

void

_integrate_forces(state: PhysicsDirectBodyState3D) virtual

void

apply_central_impulse(impulse: Vector3)

void

apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0))

int

get_bone_id() const

bool

get_simulate_physics()

bool

is_simulating_physics()


Перечисления

enum DampMode: 🔗

DampMode DAMP_MODE_COMBINE = 0

В этом режиме значение демпфирования тела добавляется к любому значению, заданному в областях, или к значению по умолчанию.

DampMode DAMP_MODE_REPLACE = 1

В этом режиме значение демпфирования тела заменяет любое значение, заданное в областях, или значение по умолчанию.


enum JointType: 🔗

JointType JOINT_TYPE_NONE = 0

К PhysicsBone3D не применяется ни одного сочленения.

JointType JOINT_TYPE_PIN = 1

К PhysicsBone3D применено штифтовое соединение.

JointType JOINT_TYPE_CONE = 2

К PhysicsBone3D применено коническое соединение.

JointType JOINT_TYPE_HINGE = 3

К PhysicsBone3D применено шарнирное соединение.

JointType JOINT_TYPE_SLIDER = 4

К PhysicsBone3D применено скользящее соединение.

JointType JOINT_TYPE_6DOF = 5

К PhysicsBone3D применено соединение с 6 степенями свободы.


Описания свойств

float angular_damp = 0.0 🔗

  • void set_angular_damp(value: float)

  • float get_angular_damp()

Демпфирует вращение тела. По умолчанию тело будет использовать настройку проекта ProjectSettings.physics/3d/default_angular_damp или любое переопределение значения, заданное Area3D, в котором находится тело. В зависимости от angular_damp_mode вы можете задать angular_damp для добавления или замены значения демпфирования тела.

Подробнее о демпфировании см. в ProjectSettings.physics/3d/default_angular_damp.


DampMode angular_damp_mode = 0 🔗

Определяет, как применяется angular_damp.


Vector3 angular_velocity = Vector3(0, 0, 0) 🔗

  • void set_angular_velocity(value: Vector3)

  • Vector3 get_angular_velocity()

Скорость вращения PhysicalBone3D в радианах в секунду.


Transform3D body_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

Устанавливает трансформацию тела.


float bounce = 0.0 🔗

  • void set_bounce(value: float)

  • float get_bounce()

Упругость тела. Значения варьируются от 0 (без отскока) до 1 (полная упругость).

Примечание: Даже если bounce установлен на 1.0, часть энергии будет потеряна со временем из-за линейного и углового затухания. Чтобы иметь PhysicalBone3D, который сохраняет всю свою энергию с течением времени, установите bounce на 1.0, linear_damp_mode на DAMP_MODE_REPLACE, linear_damp на 0.0, angular_damp_mode на DAMP_MODE_REPLACE и angular_damp на 0.0.


bool can_sleep = true 🔗

  • void set_can_sleep(value: bool)

  • bool is_able_to_sleep()

Если true, тело деактивируется при отсутствии движения, поэтому оно не будет участвовать в симуляции, пока не будет разбужено внешней силой.


bool custom_integrator = false 🔗

  • void set_use_custom_integrator(value: bool)

  • bool is_using_custom_integrator()

Если true, стандартная интеграция силы (например, гравитация или демпфирование) будет отключена для этого тела. За исключением реакции на столкновение, тело будет двигаться только так, как определено методом _integrate_forces(), если этот виртуальный метод переопределен.

Установка этого свойства вызовет метод PhysicsServer3D.body_set_omit_force_integration() внутренне.


float friction = 1.0 🔗

  • void set_friction(value: float)

  • float get_friction()

Трение тела от 0 (отсутствие трения) до 1 (максимальное трение).


float gravity_scale = 1.0 🔗

  • void set_gravity_scale(value: float)

  • float get_gravity_scale()

Это умножается на ProjectSettings.physics/3d/default_gravity, чтобы получить гравитацию этого тела. Например, значение 1.0 применит нормальную гравитацию, 2.0 применит двойную гравитацию, а 0.5 применит половину гравитации к этому телу.


Transform3D joint_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

Устанавливает преобразование сочленения.


Vector3 joint_rotation = Vector3(0, 0, 0) 🔗

  • void set_joint_rotation(value: Vector3)

  • Vector3 get_joint_rotation()

Задает угол поворота сочленения в радианах.


JointType joint_type = 0 🔗

Устанавливает тип соединения.


float linear_damp = 0.0 🔗

  • void set_linear_damp(value: float)

  • float get_linear_damp()

Демпфирует движение тела. По умолчанию тело будет использовать ProjectSettings.physics/3d/default_linear_damp или любое переопределение значения, заданное Area3D, в котором находится тело. В зависимости от linear_damp_mode, linear_damp может быть добавлен или заменен значением демпфирования тела.

Подробнее о демпфировании см. ProjectSettings.physics/3d/default_linear_damp.


DampMode linear_damp_mode = 0 🔗

Определяет, как применяется linear_damp.


Vector3 linear_velocity = Vector3(0, 0, 0) 🔗

  • void set_linear_velocity(value: Vector3)

  • Vector3 get_linear_velocity()

Линейная скорость тела в единицах в секунду. Может использоваться спорадически, но не устанавливайте это в каждом кадре, потому что физика может работать в другом потоке и работать с другой гранулярностью. Используйте _integrate_forces() в качестве цикла процесса для точного управления состоянием тела.


float mass = 1.0 🔗

Масса тела.


Описания метода

void _integrate_forces(state: PhysicsDirectBodyState3D) virtual 🔗

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


void apply_central_impulse(impulse: Vector3) 🔗

Применяет направленный импульс, не влияя на вращение.

Импульс не зависит от времени! Применение импульса в каждом кадре приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых ударов (в противном случае используйте функции "_integrate_forces").

Это эквивалентно использованию apply_impulse() в центре масс тела.


void apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) 🔗

Применяет позиционированный импульс к PhysicsBone3D.

Импульс не зависит от времени! Применение импульса в каждом кадре приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых ударов (в противном случае используйте функции "_integrate_forces").

position — это смещение от начала координат PhysicsBone3D в глобальных координатах.


int get_bone_id() const 🔗

Возвращает уникальный идентификатор PhysicsBone3D.


bool get_simulate_physics() 🔗

Возвращает true, если PhysicsBone3D разрешено моделировать физику.


bool is_simulating_physics() 🔗

Возвращает true, если PhysicsBone3D в данный момент моделирует физику.