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.

SoftBody3D

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

Una mesh di fisica 3D deformabile.

Descrizione

Una mesh di fisica 3D deformabile. Utilizzata per creare oggetti elastici o deformabili come stoffa, gomma o altri materiali flessibili.

Inoltre, SoftBody3D è soggetto alle forze del vento definite in Area3D (vedi Area3D.wind_source_path, Area3D.wind_force_magnitude e Area3D.wind_attenuation_factor).

Nota: Si consiglia di utilizzare Jolt Physics quando si utilizza SoftBody3D invece del GodotPhysics3D predefinito, poiché l'implementazione dei corpi deformabili di Jolt Physics è più veloce e affidabile. È possibile cambiare il motore fisico attraverso l'impostazione del progetto ProjectSettings.physics/3d/physics_engine.

Tutorial

Proprietà

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

Metodi

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)


Enumerazioni

enum DisableMode: 🔗

DisableMode DISABLE_MODE_REMOVE = 0

Quando Node.process_mode è impostato su Node.PROCESS_MODE_DISABLED, rimuovi dalla simulazione di fisica per fermare tutte le interazioni fisiche con questo SoftBody3D.

Riaggiunge il corpo automaticamente alla simulazione di fisica quando il Node viene nuovamente elaborato.

DisableMode DISABLE_MODE_KEEP_ACTIVE = 1

Quando Node.process_mode è impostato su Node.PROCESS_MODE_DISABLED, non influire sulla simulazione di fisica.


Descrizioni delle proprietà

int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Gli strati di fisica in cui questo SoftBody3D si trova. Gli oggetti di collisione possono esistere in uno o più dei 32 strati diversi. Vedi anche collision_mask.

Nota: L'oggetto A può rilevare un contatto con l'oggetto B solo se l'oggetto B si trova in uno qualsiasi dei strati che l'oggetto A scansiona. Vedi Strati e maschere di collisione nella documentazione per ulteriori informazioni.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Gli strati di fisica che questo SoftBody3D scansiona. Gli oggetti di collisione possono esistere in uno o più dei 32 strati diversi. Vedi anche collision_mask.

Nota: L'oggetto A può rilevare un contatto con l'oggetto B solo se l'oggetto B si trova in uno qualsiasi dei strati che l'oggetto A scansiona. Vedi Strati e maschere di collisione nella documentazione per ulteriori informazioni.


float damping_coefficient = 0.01 🔗

  • void set_damping_coefficient(value: float)

  • float get_damping_coefficient()

Il coefficiente di smorzamento del corpo. Valori più alti rallenteranno il corpo in modo più evidente quando vengono applicate forze.


DisableMode disable_mode = 0 🔗

Definisce il comportamento nella fisica quando Node.process_mode è impostato su Node.PROCESS_MODE_DISABLED.


float drag_coefficient = 0.0 🔗

  • void set_drag_coefficient(value: float)

  • float get_drag_coefficient()

Il coefficiente di resistenza aerodinamica del corpo. Valori più alti aumentano la resistenza all'aria di questo corpo.

Nota: Questo valore è attualmente inutilizzato dall'implementazione fisica predefinita di Godot.


float linear_stiffness = 0.5 🔗

  • void set_linear_stiffness(value: float)

  • float get_linear_stiffness()

Valori più alti risulteranno in un corpo più rigido, mentre valori più bassi aumenteranno la capacità del corpo di piegarsi. Il valore può essere compreso tra 0.0 e 1.0 (inclusi).


NodePath parent_collision_ignore = NodePath("") 🔗

  • void set_parent_collision_ignore(value: NodePath)

  • NodePath get_parent_collision_ignore()

Il NodePath verso un CollisionObject3D che questo SoftBody3D dovrebbe evitare di passare attraverso.


float pressure_coefficient = 0.0 🔗

  • void set_pressure_coefficient(value: float)

  • float get_pressure_coefficient()

Il coefficiente di pressione di questo corpo deformabile. Simula l'accumulo di pressione dall'interno di questo corpo. Valori più alti aumentano la forza di questo effetto.


bool ray_pickable = true 🔗

  • void set_ray_pickable(value: bool)

  • bool is_ray_pickable()

Se true, il SoftBody3D risponderà ai nodi RayCast3D.


float shrinking_factor = 0.0 🔗

  • void set_shrinking_factor(value: float)

  • float get_shrinking_factor()

Scales the rest lengths of SoftBody3D's edge constraints. Positive values shrink the mesh, while negative values expand it. For example, a value of 0.1 shortens the edges of the mesh by 10%, while -0.1 expands the edges by 10%.

Note: shrinking_factor is best used on surface meshes with pinned points.


int simulation_precision = 5 🔗

  • void set_simulation_precision(value: int)

  • int get_simulation_precision()

Aumentare questo valore migliorerà la simulazione risultante, ma può influire sulle prestazioni. Usare con cautela.


float total_mass = 1.0 🔗

  • void set_total_mass(value: float)

  • float get_total_mass()

The SoftBody3D's mass.


Descrizioni dei metodi

void add_collision_exception_with(body: Node) 🔗

Aggiunge un corpo alla lista dei corpi con cui questo corpo non può entrare in collisione.


void apply_central_force(force: Vector3) 🔗

Distribuisce e applica una forza a tutti i punti. Una forza è dipendente dal tempo e pensata per essere applicata a ogni aggiornamento della fisica.


void apply_central_impulse(impulse: Vector3) 🔗

Distribuisce e applica un impulso a tutti i punti.

Un impulso è indipendente dal tempo! Applicare un impulso a ogni frame risulterebbe in a una forza dipendente dal frame rate. Per questo motivo, dovrebbe essere utilizzato solo quando si simulano impatti singoli (altrimenti, utilizza le funzioni "_force").


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

Applica una forza a un punto. Una forza è dipendente dal tempo e pensata per essere applicata a ogni aggiornamento della fisica.


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

Applica un impulso a un punto.

Un impulso è indipendente dal tempo! Applicare un impulso a ogni frame risulterebbe in a una forza dipendente dal frame rate. Per questo motivo, dovrebbe essere utilizzato solo quando si simulano impatti singoli (altrimenti, utilizza le funzioni "_force").


Array[PhysicsBody3D] get_collision_exceptions() 🔗

Restituisce un array di nodi aggiunti come eccezioni di collisione per questo corpo.


bool get_collision_layer_value(layer_number: int) const 🔗

Restituisce se lo strato specificato di collision_layer è abilitato o meno, fornito un numero di strato layer_number tra 1 e 32.


bool get_collision_mask_value(layer_number: int) const 🔗

Restituisce se lo strato specificato della collision_mask è abilitato, fornito un numero di strato layer_number tra 1 e 32.


RID get_physics_rid() const 🔗

Restituisce il RID interno utilizzato dal PhysicsServer3D per questo corpo.


Vector3 get_point_transform(point_index: int) 🔗

Restituisce la traslazione locale di un vertice nell'array di superfici.


bool is_point_pinned(point_index: int) const 🔗

Restituisce true se il vertice è impostato come fisso.


void remove_collision_exception_with(body: Node) 🔗

Rimuove un corpo dalla lista dei corpi con cui questo corpo non può entrare in collisione.


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

In base a value, abilita o disabilita lo strato specificato nel collision_layer, fornito un layer_number compreso tra 1 e 32.


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

In base a value, abilita o disabilita lo strato specificato nel collision_mask, fornito un layer_number compreso tra 1 e 32.


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

Imposta lo stato fissato di un vertice di superficie. Se impostato su true, il parametro facoltativo attachment_path può definire un Node3D a cui sarà attaccato il vertice fissato.