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...
SoftBody3D
Наследует: MeshInstance3D < GeometryInstance3D < VisualInstance3D < Node3D < Node < Object
Деформируемая 3D физическая сетка.
Описание
Деформируемая 3D-физическая сетка. Используется для создания эластичных или деформируемых объектов, таких как ткань, резина или другие гибкие материалы.
Кроме того, SoftBody3D подвержен влиянию сил ветра, определенных в Area3D (см. Area3D.wind_source_path, Area3D.wind_force_magnitude и Area3D.wind_attenuation_factor).
Примечание: Рекомендуется использовать Jolt Physics при использовании SoftBody3D вместо GodotPhysics3D по умолчанию, так как реализация мягкого тела Jolt Physics быстрее и надежнее. Вы можете переключить физический движок с помощью настройки проекта ProjectSettings.physics/3d/physics_engine.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
add_collision_exception_with(body: Node) |
void |
apply_central_force(force: Vector3) |
void |
apply_central_impulse(impulse: Vector3) |
void |
apply_force(point_index: int, force: Vector3) |
void |
apply_impulse(point_index: int, impulse: Vector3) |
get_collision_layer_value(layer_number: int) const |
|
get_collision_mask_value(layer_number: int) const |
|
get_physics_rid() const |
|
get_point_transform(point_index: int) |
|
is_point_pinned(point_index: int) const |
|
void |
|
void |
set_collision_layer_value(layer_number: int, value: bool) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
void |
set_point_pinned(point_index: int, pinned: bool, attachment_path: NodePath = NodePath(""), insert_at: int = -1) |
Перечисления
enum DisableMode: 🔗
DisableMode DISABLE_MODE_REMOVE = 0
Когда Node.process_mode установлен в Node.PROCESS_MODE_DISABLED, объект SoftBody3D удаляется из физического моделирования, чтобы остановить все физические взаимодействия с ним.
Автоматически добавляется обратно в физическое моделирование, когда Node обрабатывается снова.
DisableMode DISABLE_MODE_KEEP_ACTIVE = 1
Если Node.process_mode установлен в Node.PROCESS_MODE_DISABLED, это не влияет на физическую симуляцию.
Описания свойств
Физические слои этого SoftBody3Dis in (находится в). Коллизионные объекты могут существовать в одном или нескольких из 32 различных слоев. См. также collision_mask.
Примечание: Объект A может обнаружить контакт с объектом B только в том случае, если объект B находится в любом из слоев, которые сканирует объект A. Дополнительную информацию см. в разделе Слои и маски столкновений. в документации.
Физические слои этого SoftBody3D scans. Коллизионные объекты могут сканировать один или несколько из 32 различных слоев. Смотрите также collision_layer.
Примечание: Объект A может обнаружить контакт с объектом B только если объект B находится в любом из слоев, которые сканирует объект A. Дополнительную информацию можно посмотреть в документации, перейдя по ссылке Collision layers and masks.
float damping_coefficient = 0.01 🔗
Коэффициент демпфирования тела. Более высокие значения будут более заметно замедлять тело при приложении сил.
DisableMode disable_mode = 0 🔗
void set_disable_mode(value: DisableMode)
DisableMode get_disable_mode()
Определяет поведение в физике, когда Node.process_mode установлен в Node.PROCESS_MODE_DISABLED.
float drag_coefficient = 0.0 🔗
Коэффициент сопротивления тела. Более высокие значения увеличивают сопротивление воздуха этого тела.
Примечание: Это значение в настоящее время не используется реализацией физики Godot по умолчанию.
float linear_stiffness = 0.5 🔗
Более высокие значения приведут к более жесткому телу, а более низкие значения повысят способность тела гнуться. Значение может быть в диапазоне от `` 0.0 `` до `` 1.0 `` (включительно).
NodePath parent_collision_ignore = NodePath("") 🔗
NodePath к CollisionObject3D, из которого SoftBody3D должен избегать пересечения.
float pressure_coefficient = 0.0 🔗
Коэффициент давления этого мягкого тела. Имитирует нарастание давления изнутри этого тела. Более высокие значения увеличивают силу этого эффекта.
Если true, SoftBody3D будет реагировать на RayCast3D.
float shrinking_factor = 0.0 🔗
Масштабирует оставшиеся длины ограничений ребер SoftBody3D. Положительные значения сжимают сетку, а отрицательные расширяют ее. Например, значение 0.1 сокращает края сетки на 10%, а -0.1 расширяет края на 10%.
Примечание: shrinking_factor лучше всего использовать на поверхностных сетках с закрепленными точками.
int simulation_precision = 5 🔗
Увеличение этого значения улучшит результаты моделирования, но может повлиять на производительность. Используйте с осторожностью.
The SoftBody3D's mass.
Описания метода
void add_collision_exception_with(body: Node) 🔗
Добавляет тело в список тел, с которыми данное тело не может столкнуться.
void apply_central_force(force: Vector3) 🔗
Распределяет и применяет силу ко всем точкам. Сила зависит от времени и должна применяться при каждом обновлении физики.
void apply_central_impulse(impulse: Vector3) 🔗
Распределяет и применяет импульс ко всем точкам.
Импульс не зависит от времени! Применение импульса в каждом кадре приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых ударов (в противном случае используйте функции "_force").
void apply_force(point_index: int, force: Vector3) 🔗
Прикладывает силу к точке. Сила зависит от времени и должна применяться при каждом обновлении физики.
void apply_impulse(point_index: int, impulse: Vector3) 🔗
Применяет импульс к точке.
Импульс не зависит от времени! Применение импульса в каждом кадре приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых ударов (в противном случае используйте функции "_force").
Array[PhysicsBody3D] get_collision_exceptions() 🔗
Возвращает массив узлов, которые были добавлены как исключения столкновений для этого тела.
bool get_collision_layer_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_layer, учитывая layer_number от 1 до 32.
bool get_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_mask, учитывая layer_number от 1 до 32.
Возвращает внутренний RID, используемый PhysicsServer3D для этого тела.
Vector3 get_point_transform(point_index: int) 🔗
Возвращает локальное смещение вершины в массиве поверхности.
bool is_point_pinned(point_index: int) const 🔗
Возвращает true, если вершина установлена в закрепленное состояние.
void remove_collision_exception_with(body: Node) 🔗
Удаляет тело из списка тел, с которыми данное тело не может столкнуться.
void set_collision_layer_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_layer, учитывая layer_number от 1 до 32.
void set_collision_mask_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_mask при заданном layer_number от 1 до 32.
void set_point_pinned(point_index: int, pinned: bool, attachment_path: NodePath = NodePath(""), insert_at: int = -1) 🔗
Устанавливает состояние закрепления вершины поверхности. Когда установлено значение true, необязательный параметр attachment_path может определить Node3D, к которому будет прикреплена закрепленная вершина.