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

Hérite de : MeshInstance3D < GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

Un maillage 3D physique déformable.

Description

Un maillage physique 3D déformable. Utilisé pour créer des objets élastiques ou déformables tels que du tissu, du caoutchouc ou d'autres matériaux flexibles.

En outre, SoftBody3D est soumis aux forces du vent définies dans Area3D (voir Area3D.wind_source_path, Area3D.wind_force_magnitude, et Area3D.wind_attenuation_factor).

Note : Il est recommandé d'utiliser Jolt Physics lors de l'utilisation de SoftBody3D au lieu du GodotPhysics3D par défaut, car l'implémentation du corps souple de Jolt Physics est plus rapide et plus fiable. Vous pouvez changer le moteur de physique en utilisant le paramètre de projet ProjectSettings.physics/3d/physics_engine.

Tutoriels

Propriétés

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éthodes

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)


Énumérations

enum DisableMode: 🔗

DisableMode DISABLE_MODE_REMOVE = 0

Quand Node.process_mode est défini à Node.PROCESS_MODE_DISABLED, le retirer de la simulation physique pour arrêter toutes les interactions physiques avec ce SoftBody3D.

Ré-ajouté automatiquement à la simulation physique lorsque le Node est de nouveau traité.

DisableMode DISABLE_MODE_KEEP_ACTIVE = 1

Quand Node.process_mode est défini à Node.PROCESS_MODE_DISABLED, ne pas affecter la simulation physique.


Descriptions des propriétés

int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

Les couches physiques où se trouve ce SoftBody3D. Les objets de collision peuvent exister dans une ou plusieurs des 32 couches existantes. Voir aussi collision_mask.

Note : Un objet A peut détecter un contact avec l'objet B seulement si l'objet B est dans l'une des couches que l'objet A scanne. Voir Niveaux et masques de collisions dans la documentation pour plus d'informations.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

La couche physique que ce SoftBody3D scanne. Les objets de collision peuvent scanner une ou plusieurs des 32 couches existantes. Voir aussi collision_layer.

Note : Un objet A peut détecter un contact avec l'objet B seulement si l'objet B est dans l'une des couches que l'objet A scanne. Voir Niveaux et masques de collisions dans la documentation pour plus d'informations.


float damping_coefficient = 0.01 🔗

  • void set_damping_coefficient(value: float)

  • float get_damping_coefficient()

Le coefficient d'amortissement du corps. Des valeurs plus élevées ralentiront le corps de façon plus visible lorsque les forces sont appliquées.


DisableMode disable_mode = 0 🔗

Définit le comportement physique lorsque Node.process_mode est défini à Node.PROCESS_MODE_DISABLED.


float drag_coefficient = 0.0 🔗

  • void set_drag_coefficient(value: float)

  • float get_drag_coefficient()

Le coefficient de traînée du corps. Des valeurs plus élevées augmentent la résistance à l'air de ce corps.

Note : Cette valeur est actuellement inutilisée par l'implémentation physique par défaut de Godot.


float linear_stiffness = 0.5 🔗

  • void set_linear_stiffness(value: float)

  • float get_linear_stiffness()

Des valeurs plus élevées entraîneront un corps plus rigide, tandis que des valeurs plus faibles augmenteront la capacité du corps à plier. La valeur peut être comprise entre 0.0 et 1.0 (inclusifs).


NodePath parent_collision_ignore = NodePath("") 🔗

  • void set_parent_collision_ignore(value: NodePath)

  • NodePath get_parent_collision_ignore()

NodePath vers un CollisionObject3D avec lequel ce SoftBody3D devrait éviter de chevaucher ("clipping").


float pressure_coefficient = 0.0 🔗

  • void set_pressure_coefficient(value: float)

  • float get_pressure_coefficient()

Le coefficient de pression de ce corps souple. Simule l'accumulation de pression de l'intérieur de ce corps. Des valeurs plus élevées augmentent la force de cet effet.


bool ray_pickable = true 🔗

  • void set_ray_pickable(value: bool)

  • bool is_ray_pickable()

Si true, le SoftBody3D répondra aux RayCast3Ds.


float shrinking_factor = 0.0 🔗

  • void set_shrinking_factor(value: float)

  • float get_shrinking_factor()

Redimensionne les longueurs de repos des contraintes d'arête du SoftBody3D. Des valeurs positives réduisent le maillage, tandis que les valeurs négatives l'élargissent. Par exemple, une valeur de 0.1 raccourcit les arêtes du maillage de 10%, tandis que -0.1 étend les arêtes de 10%.

Note : Le mieux est d'utiliser shrinking_factor sur des maillages de surface avec des points épinglés.


int simulation_precision = 5 🔗

  • void set_simulation_precision(value: int)

  • int get_simulation_precision()

Augmenter cette valeur améliorera la simulation résultante, mais peut affecter les performances. Utilisez avec parcimonie.


float total_mass = 1.0 🔗

  • void set_total_mass(value: float)

  • float get_total_mass()

The SoftBody3D's mass.


Descriptions des méthodes

void add_collision_exception_with(body: Node) 🔗

Ajoute un corps à la liste des corps avec lesquels ce corps ne peut entrer en collision.


void apply_central_force(force: Vector3) 🔗

Distribue et applique une force à tous les points. Une force est dépendante du temps et est destinée à être appliquée à chaque mise à jour physique.


void apply_central_impulse(impulse: Vector3) 🔗

Distribue et applique une impulsion à tous les points.

Une impulsion est indépendante du temps ! Appliquer une impulsion à chaque trame entraînerait une force dépendante du taux de rafraîchissement. Pour cette raison, elle ne devrait être utilisée que pour simuler des impacts ponctuels (utiliser les fonctions "_force" sinon).


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

Applique une force à un point. Une force est dépendante du temps et destinée à être appliquée à chaque mise à jour physique.


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

Applique une impulsion à un point.

Une impulsion est indépendante du temps ! Appliquer une impulsion à chaque trame entraînerait une force dépendante du taux de rafraichissent. Pour cette raison, elle ne devrait être utilisée que pour simuler des impacts ponctuels (utiliser les fonctions "_force" sinon).


Array[PhysicsBody3D] get_collision_exceptions() 🔗

Renvoie un tableau de nœuds qui ont été ajoutés comme exceptions de collision pour ce corps.


bool get_collision_layer_value(layer_number: int) const 🔗

Renvoie si la couche spécifiée du collision_layer est activée, étant donné un numéro de couche layer_number entre 1 et 32.


bool get_collision_mask_value(layer_number: int) const 🔗

Renvoie si la couche spécifiée du collision_mask est activée, étant donné un numéro de couche layer_number entre 1 et 32.


RID get_physics_rid() const 🔗

Renvoie le RID interne utilisé par le PhysicsServer3D pour ce corps.


Vector3 get_point_transform(point_index: int) 🔗

Renvoie la translation locale d'un sommet du tableau de surface.


bool is_point_pinned(point_index: int) const 🔗

Renvoie true si le sommet est défini comme épinglé.


void remove_collision_exception_with(body: Node) 🔗

Retire un corps de la liste des corps avec lesquels ce corps ne peut entrer en collision.


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

Selon value, active ou désactive la couche spécifiée dans le collision_layer, étant donné un numéro de couche layer_number entre 1 et 32.


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

Selon value, active ou désactive la couche spécifiée dans le collision_mask, étant donné un numéro de couche layer_number entre 1 et 32.


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

Définit l'état épinglé d'un sommet de surface. Lorsque défini à true, le chemin d'attachement optionnel attachment_path peut définir un Node3D auquel le sommet épinglé sera attaché.