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.

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

Свойства

int

collision_layer

1

int

collision_mask

1

float

damping_coefficient

0.01

DisableMode

disable_mode

0

float

drag_coefficient

0.0

float

linear_stiffness

0.5

NodePath

parent_collision_ignore

NodePath("")

float

pressure_coefficient

0.0

bool

ray_pickable

true

float

shrinking_factor

0.0

int

simulation_precision

5

float

total_mass

1.0

Методы

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)

Array[PhysicsBody3D]

get_collision_exceptions()

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

RID

get_physics_rid() const

Vector3

get_point_transform(point_index: int)

bool

is_point_pinned(point_index: int) const

void

remove_collision_exception_with(body: Node)

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, это не влияет на физическую симуляцию.


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

int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Физические слои этого SoftBody3Dis in (находится в). Коллизионные объекты могут существовать в одном или нескольких из 32 различных слоев. См. также collision_mask.

Примечание: Объект A может обнаружить контакт с объектом B только в том случае, если объект B находится в любом из слоев, которые сканирует объект A. Дополнительную информацию см. в разделе Слои и маски столкновений. в документации.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Физические слои этого SoftBody3D scans. Коллизионные объекты могут сканировать один или несколько из 32 различных слоев. Смотрите также collision_layer.

Примечание: Объект A может обнаружить контакт с объектом B только если объект B находится в любом из слоев, которые сканирует объект A. Дополнительную информацию можно посмотреть в документации, перейдя по ссылке Collision layers and masks.


float damping_coefficient = 0.01 🔗

  • void set_damping_coefficient(value: float)

  • float get_damping_coefficient()

Коэффициент демпфирования тела. Более высокие значения будут более заметно замедлять тело при приложении сил.


DisableMode disable_mode = 0 🔗

Определяет поведение в физике, когда Node.process_mode установлен в Node.PROCESS_MODE_DISABLED.


float drag_coefficient = 0.0 🔗

  • void set_drag_coefficient(value: float)

  • float get_drag_coefficient()

Коэффициент сопротивления тела. Более высокие значения увеличивают сопротивление воздуха этого тела.

Примечание: Это значение в настоящее время не используется реализацией физики Godot по умолчанию.


float linear_stiffness = 0.5 🔗

  • void set_linear_stiffness(value: float)

  • float get_linear_stiffness()

Более высокие значения приведут к более жесткому телу, а более низкие значения повысят способность тела гнуться. Значение может быть в диапазоне от `` 0.0 `` до `` 1.0 `` (включительно).


NodePath parent_collision_ignore = NodePath("") 🔗

  • void set_parent_collision_ignore(value: NodePath)

  • NodePath get_parent_collision_ignore()

NodePath к CollisionObject3D, из которого SoftBody3D должен избегать пересечения.


float pressure_coefficient = 0.0 🔗

  • void set_pressure_coefficient(value: float)

  • float get_pressure_coefficient()

Коэффициент давления этого мягкого тела. Имитирует нарастание давления изнутри этого тела. Более высокие значения увеличивают силу этого эффекта.


bool ray_pickable = true 🔗

  • void set_ray_pickable(value: bool)

  • bool is_ray_pickable()

Если true, SoftBody3D будет реагировать на RayCast3D.


float shrinking_factor = 0.0 🔗

  • void set_shrinking_factor(value: float)

  • float get_shrinking_factor()

Масштабирует оставшиеся длины ограничений ребер SoftBody3D. Положительные значения сжимают сетку, а отрицательные расширяют ее. Например, значение 0.1 сокращает края сетки на 10%, а -0.1 расширяет края на 10%.

Примечание: shrinking_factor лучше всего использовать на поверхностных сетках с закрепленными точками.


int simulation_precision = 5 🔗

  • void set_simulation_precision(value: int)

  • int get_simulation_precision()

Увеличение этого значения улучшит результаты моделирования, но может повлиять на производительность. Используйте с осторожностью.


float total_mass = 1.0 🔗

  • void set_total_mass(value: float)

  • float get_total_mass()

Масса SoftBody3D.


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

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 get_physics_rid() const 🔗

Возвращает внутренний 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, к которому будет прикреплена закрепленная вершина.