Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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 в данный момент моделирует физику.