SoftBody3D

Hereda: MeshInstance3D < GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

Una malla física 3D deformable.

Descripción

A deformable 3D physics mesh. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials.

Additionally, SoftBody3D is subject to wind forces defined in Area3D (see Area3D.wind_source_path, Area3D.wind_force_magnitude, and Area3D.wind_attenuation_factor).

Note: It's recommended to use Jolt Physics when using SoftBody3D instead of the default GodotPhysics3D, as Jolt Physics' soft body implementation is faster and more reliable. You can switch the physics engine using the ProjectSettings.physics/3d/physics_engine project setting.

Tutoriales

Propiedades

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

Métodos

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)


Enumeraciones

enum DisableMode: 🔗

DisableMode DISABLE_MODE_REMOVE = 0

Cuando Node.process_mode está establecido en Node.PROCESS_MODE_DISABLED, se elimina de la simulación física para detener todas las interacciones físicas con este SoftBody3D.

Se vuelve a añadir automáticamente a la simulación física cuando el Node se procesa de nuevo.

DisableMode DISABLE_MODE_KEEP_ACTIVE = 1

Cuando Node.process_mode se establece en Node.PROCESS_MODE_DISABLED, no afecta a la simulación de físicas.


Descripciones de Propiedades

int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Las capas de física en las que se encuentra este SoftBody3D. Los objetos de colisión pueden existir en una o más de 32 capas diferentes. Ver también collision_mask.

Nota: El objeto A puede detectar un contacto con el objeto B solo si el objeto B está en alguna de las capas que el objeto A escanea. Véase Capas y máscaras de colisión en la documentación para más información.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Las capas de física que este SoftBody3D escanea. Los objetos de colisión pueden escanear una o más de 32 capas diferentes. Véase también collision_layer.

Nota: El objeto A puede detectar un contacto con el objeto B solo si el objeto B está en alguna de las capas que el objeto A escanea. Véase Capas y máscaras de colisión en la documentación para más información.


float damping_coefficient = 0.01 🔗

  • void set_damping_coefficient(value: float)

  • float get_damping_coefficient()

El coeficiente de amortiguación del cuerpo. Los valores más altos ralentizarán el cuerpo de forma más notoria cuando se apliquen fuerzas.


DisableMode disable_mode = 0 🔗

Define el comportamiento en la física cuando Node.process_mode se establece a Node.PROCESS_MODE_DISABLED.


float drag_coefficient = 0.0 🔗

  • void set_drag_coefficient(value: float)

  • float get_drag_coefficient()

El coeficiente de arrastre del cuerpo. Los valores más altos aumentan la resistencia al aire de este cuerpo.

Nota: Este valor no es utilizado actualmente por la implementación física predeterminada de Godot.


float linear_stiffness = 0.5 🔗

  • void set_linear_stiffness(value: float)

  • float get_linear_stiffness()

Los valores más altos resultarán en un cuerpo más rígido, mientras que los valores más bajos aumentarán la capacidad del cuerpo para doblarse. El valor puede estar entre 0.0 y 1.0 (inclusivo).


NodePath parent_collision_ignore = NodePath("") 🔗

  • void set_parent_collision_ignore(value: NodePath)

  • NodePath get_parent_collision_ignore()

NodePath a un CollisionObject3D que este SoftBody3D debería evitar atravesar.


float pressure_coefficient = 0.0 🔗

  • void set_pressure_coefficient(value: float)

  • float get_pressure_coefficient()

El coeficiente de presión de este cuerpo blando. Simula la acumulación de presión desde el interior de este cuerpo. Los valores más altos aumentan la fuerza de este efecto.


bool ray_pickable = true 🔗

  • void set_ray_pickable(value: bool)

  • bool is_ray_pickable()

Si es true, el SoftBody3D responderá a los RayCast3Ds.


float shrinking_factor = 0.0 🔗

  • void set_shrinking_factor(value: float)

  • float get_shrinking_factor()

Escala las longitudes de reposo de las restricciones de borde del SoftBody3D. Los valores positivos encogen la malla, mientras que los valores negativos la expanden. Por ejemplo, un valor de 0.1 acorta los bordes de la malla en un 10%, mientras que -0.1 expande los bordes en un 10%.

Nota: shrinking_factor se usa mejor en mallas de superficie con puntos fijados.


int simulation_precision = 5 🔗

  • void set_simulation_precision(value: int)

  • int get_simulation_precision()

Aumentar este valor mejorará la simulación resultante, pero puede afectar al rendimiento. Usar con cuidado.


float total_mass = 1.0 🔗

  • void set_total_mass(value: float)

  • float get_total_mass()

La masa del SoftBody3D.


Descripciones de Métodos

void add_collision_exception_with(body: Node) 🔗

Añade un cuerpo a la lista de cuerpos con los que este cuerpo no puede colisionar.


void apply_central_force(force: Vector3) 🔗

Distribuye y aplica una fuerza a todos los puntos. Una fuerza depende del tiempo y está pensada para aplicarse en cada actualización de la física.


void apply_central_impulse(impulse: Vector3) 🔗

Distribuye y aplica un impulso a todos los puntos.

¡Un impulso es independiente del tiempo! Aplicar un impulso cada frame resultaría en una fuerza dependiente del framerate. Por esta razón, solo debe usarse al simular impactos únicos (usa las funciones "_force" en caso contrario).


void apply_force(point_index: int, force: Vector3) 🔗

Aplica una fuerza a un punto. Una fuerza depende del tiempo y está pensada para aplicarse en cada actualización de la física.


void apply_impulse(point_index: int, impulse: Vector3) 🔗

Applies an impulse to a point.

An impulse is time-independent! Applying an impulse every frame would result in a framerate-dependent force. For this reason, it should only be used when simulating one-time impacts (use the "_force" functions otherwise).


Array[PhysicsBody3D] get_collision_exceptions() 🔗

Devuelve un conjunto de nodos que se añadieron como excepciones de colisión para este cuerpo.


bool get_collision_layer_value(layer_number: int) const 🔗

Devuelve si la capa especificada de collision_layer está habilitada o no, dado un layer_number entre 1 y 32.


bool get_collision_mask_value(layer_number: int) const 🔗

Devuelve si la capa especificada de collision_mask está habilitada o no, dado un layer_number entre 1 y 32.


RID get_physics_rid() const 🔗

Devuelve el RID interno utilizado por el PhysicsServer3D para este cuerpo.


Vector3 get_point_transform(point_index: int) 🔗

Devuelve la traslación local de un vértice en el array de superficie.


bool is_point_pinned(point_index: int) const 🔗

Devuelve true si el vértice está fijado.


void remove_collision_exception_with(body: Node) 🔗

Quita un cuerpo de la lista de cuerpos con los que este cuerpo no puede colisionar.


void set_collision_layer_value(layer_number: int, value: bool) 🔗

Basado en value, habilita o deshabilita la capa especificada en collision_layer, dado un layer_number entre 1 y 32.


void set_collision_mask_value(layer_number: int, value: bool) 🔗

Basado en value, habilita o deshabilita la capa especificada en collision_mask, dado un layer_number entre 1 y 32.


void set_point_pinned(point_index: int, pinned: bool, attachment_path: NodePath = NodePath(""), insert_at: int = -1) 🔗

Establece el estado fijado de un vértice de la superficie. Cuando se establece en true, el attachment_path opcional puede definir un Node3D al que se adjuntará el vértice fijado.