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 🔗
Увеличение этого значения улучшит результаты моделирования, но может повлиять на производительность. Используйте с осторожностью.
Масса 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, используемый 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, к которому будет прикреплена закрепленная вершина.