PhysicalBone3D
Наследует: PhysicsBody3D < CollisionObject3D < Node3D < Node < Object
Физическое тело, используемое для того, чтобы кости в Skeleton3D реагировали на физику.
Описание
Узел PhysicalBone3D — это физическое тело, которое можно использовать для того, чтобы кости в Skeleton3D реагировали на физику.
Примечание: Для обнаружения физических костей с помощью raycasts свойство SkeletonModifier3D.active родительского PhysicalBoneSimulator3D должно быть true, а кость Skeleton3D должна быть правильно назначена PhysicalBone3D; это означает, что get_bone_id() должен возвращать действительный идентификатор (>= 0).
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
_integrate_forces(state: PhysicsDirectBodyState3D) virtual |
void |
apply_central_impulse(impulse: Vector3) |
void |
apply_impulse(impulse: Vector3, position: Vector3 = Vector3(0, 0, 0)) |
get_bone_id() const |
|
Перечисления
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 степенями свободы.
Описания свойств
Демпфирует вращение тела. По умолчанию тело будет использовать настройку проекта 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) 🔗
Скорость вращения PhysicalBone3D в радианах в секунду.
Transform3D body_offset = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗
void set_body_offset(value: Transform3D)
Transform3D get_body_offset()
Устанавливает трансформацию тела.
Упругость тела. Значения варьируются от 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.
Если true, тело деактивируется при отсутствии движения, поэтому оно не будет участвовать в симуляции, пока не будет разбужено внешней силой.
bool custom_integrator = false 🔗
Если true, стандартная интеграция силы (например, гравитация или демпфирование) будет отключена для этого тела. За исключением реакции на столкновение, тело будет двигаться только так, как определено методом _integrate_forces(), если этот виртуальный метод переопределен.
Установка этого свойства вызовет метод PhysicsServer3D.body_set_omit_force_integration() внутренне.
Трение тела от 0 (отсутствие трения) до 1 (максимальное трение).
Это умножается на 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) 🔗
void set_joint_offset(value: Transform3D)
Transform3D get_joint_offset()
Устанавливает преобразование сочленения.
Vector3 joint_rotation = Vector3(0, 0, 0) 🔗
Задает угол поворота сочленения в радианах.
Устанавливает тип соединения.
Демпфирует движение тела. По умолчанию тело будет использовать 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) 🔗
Линейная скорость тела в единицах в секунду. Может использоваться спорадически, но не устанавливайте это в каждом кадре, потому что физика может работать в другом потоке и работать с другой гранулярностью. Используйте _integrate_forces() в качестве цикла процесса для точного управления состоянием тела.
Масса тела.
Описания метода
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 в глобальных координатах.
Возвращает уникальный идентификатор PhysicsBone3D.
Возвращает true, если PhysicsBone3D разрешено моделировать физику.
bool is_simulating_physics() 🔗
Возвращает true, если PhysicsBone3D в данный момент моделирует физику.