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.

Skeleton3D

Hérite de : Node3D < Node < Object

Un nœud contenant une hiérarchie d'os, utilisé pour créer une animation de squelette 3D.

Description

Skeleton3D fournit une interface pour gérer une hiérarchie d'os, y compris la pose, le repos et l'animation (voir Animation). Il peut également utiliser la physique des ragdoll.

La transformation globale d'un os par rapport au squelette est déterminée par la pose de l'os. Le repos de l'os définit la transformation initiale de la pose de l'os.

Notez que « pose globale » ci-dessous se réfère à la transformation globale de l'os par rapport au squelette, de sorte que ce n'est pas la véritable transformation globale/mondiale de l'os.

Tutoriels

Propriétés

bool

animate_physical_bones

true

ModifierCallbackModeProcess

modifier_callback_mode_process

1

float

motion_scale

1.0

bool

show_rest_only

false

Méthodes

int

add_bone(name: String)

void

advance(delta: float)

void

clear_bones()

void

clear_bones_global_pose_override()

Skin

create_skin_from_rest_transforms()

int

find_bone(name: String) const

void

force_update_all_bone_transforms()

void

force_update_bone_child_transform(bone_idx: int)

PackedInt32Array

get_bone_children(bone_idx: int) const

int

get_bone_count() const

Transform3D

get_bone_global_pose(bone_idx: int) const

Transform3D

get_bone_global_pose_no_override(bone_idx: int) const

Transform3D

get_bone_global_pose_override(bone_idx: int) const

Transform3D

get_bone_global_rest(bone_idx: int) const

Variant

get_bone_meta(bone_idx: int, key: StringName) const

Array[StringName]

get_bone_meta_list(bone_idx: int) const

String

get_bone_name(bone_idx: int) const

int

get_bone_parent(bone_idx: int) const

Transform3D

get_bone_pose(bone_idx: int) const

Vector3

get_bone_pose_position(bone_idx: int) const

Quaternion

get_bone_pose_rotation(bone_idx: int) const

Vector3

get_bone_pose_scale(bone_idx: int) const

Transform3D

get_bone_rest(bone_idx: int) const

StringName

get_concatenated_bone_names() const

PackedInt32Array

get_parentless_bones() const

int

get_version() const

bool

has_bone_meta(bone_idx: int, key: StringName) const

bool

is_bone_enabled(bone_idx: int) const

void

localize_rests()

void

physical_bones_add_collision_exception(exception: RID)

void

physical_bones_remove_collision_exception(exception: RID)

void

physical_bones_start_simulation(bones: Array[StringName] = [])

void

physical_bones_stop_simulation()

SkinReference

register_skin(skin: Skin)

void

reset_bone_pose(bone_idx: int)

void

reset_bone_poses()

void

set_bone_enabled(bone_idx: int, enabled: bool = true)

void

set_bone_global_pose(bone_idx: int, pose: Transform3D)

void

set_bone_global_pose_override(bone_idx: int, pose: Transform3D, amount: float, persistent: bool = false)

void

set_bone_meta(bone_idx: int, key: StringName, value: Variant)

void

set_bone_name(bone_idx: int, name: String)

void

set_bone_parent(bone_idx: int, parent_idx: int)

void

set_bone_pose(bone_idx: int, pose: Transform3D)

void

set_bone_pose_position(bone_idx: int, position: Vector3)

void

set_bone_pose_rotation(bone_idx: int, rotation: Quaternion)

void

set_bone_pose_scale(bone_idx: int, scale: Vector3)

void

set_bone_rest(bone_idx: int, rest: Transform3D)

void

unparent_bone_and_rest(bone_idx: int)


Signaux

bone_enabled_changed(bone_idx: int) 🔗

Émis lorsque l'os à l'index bone_idx est activé/désactivé avec set_bone_enabled(). Utilisez is_bone_enabled() pour vérifier la nouvelle valeur.


bone_list_changed() 🔗

Émis lorsque la liste des os change, comme lors de l'appel à add_bone(), set_bone_parent(), unparent_bone_and_rest(), ou clear_bones().


pose_updated() 🔗

Émis lorsque la pose est mise à jour.

Note : Lors du traitement de la mise à jour, le signal n'est pas émis, donc une modification par SkeletonModifier3D n'est pas détectée.


rest_updated() 🔗

Émis lorsque la pose de repos est mise à jour.


show_rest_only_changed() 🔗

Émis lorsque la valeur de show_rest_only change.


skeleton_updated() 🔗

Émis lorsque la pose finale a été calculée et sera appliquée à la peau dans le processus de mise à jour.

Cela signifie que tous les traitements des SkeletonModifier3Ds sont complets. Afin de détecter l'achèvement du traitement de chaque SkeletonModifier3D, utilisez SkeletonModifier3D.modification_processed.


Énumérations

enum ModifierCallbackModeProcess: 🔗

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_PHYSICS = 0

Définit un drapeau pour traiter la modification pendant les trames de physique (voir Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS).

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_IDLE = 1

Définit un drapeau pour traiter la modification pendant les trames de traitement (voir Node.NOTIFICATION_INTERNAL_PROCESS).

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_MANUAL = 2

Ne pas traiter la modification. Utilisez advance() pour traiter la modification manuellement.


Constantes

NOTIFICATION_UPDATE_SKELETON = 50 🔗

Notification reçue lorsque la pose de ce squelette doit être mise à jour. Dans ce cas, ceci n'est appelé qu'une fois par trame dans un traitement différé.


Descriptions des propriétés

bool animate_physical_bones = true 🔗

  • void set_animate_physical_bones(value: bool)

  • bool get_animate_physical_bones()

Obsolète : Cette propriété peut être changée ou retirée dans de futures versions.

Si vous suivez le workflow recommandé et avez explicitement le PhysicalBoneSimulator3D en tant qu'enfant du Skeleton3D, vous pouvez contrôler s'il est affecté par les raycast sans exécuter physical_bones_start_simulation(), par son SkeletonModifier3D.active.

Cependant, pour les anciennes configurations (obsolètes), Skeleton3D a un PhysicalBoneSimulator3D virtuel interne pour la compatibilité. Cette propriété contrôle le SkeletonModifier3D.active du PhysicalBoneSimulator3D virtuel interne.


ModifierCallbackModeProcess modifier_callback_mode_process = 1 🔗

Définit le timing de traitement pour le modificateur.


float motion_scale = 1.0 🔗

  • void set_motion_scale(value: float)

  • float get_motion_scale()

Multiplie l'animation de la piste de position 3D.

Note : Sauf si cette valeur est de 1.0, la valeur de la clé dans l'animation ne correspondra pas à la valeur réelle de la position.


bool show_rest_only = false 🔗

  • void set_show_rest_only(value: bool)

  • bool is_show_rest_only()

Si true, force les os en leur pose de repos par défaut, quelles que soient leurs valeurs. Dans l'éditeur, cela empêche également les os d'être modifiés.


Descriptions des méthodes

int add_bone(name: String) 🔗

Ajoute un nouvel os avec le nom donné. Renvoie l'index du nouvel os, ou -1 si cette méthode échoue.

Note : Les noms des os doivent être uniques, non vides, et ne peuvent pas inclure les caractères : et /.


void advance(delta: float) 🔗

Avance manuellement le SkeletonModifier3D enfant du temps spécifié (en secondes).

Note : Le delta est temporairement accumulé dans le Skeleton3D, et le traitement différé utilise la valeur accumulée pour traiter la modification.


void clear_bones() 🔗

Efface tous les os de ce squelette.


void clear_bones_global_pose_override() 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Retire la redéfinition de pose globale sur tous les os du squelette.


Skin create_skin_from_rest_transforms() 🔗

There is currently no description for this method. Please help us by contributing one!


int find_bone(name: String) const 🔗

Renvoie l'index de l'os dont le nom correspond à name. Renvoie -1 si aucun os avec ce nom n'existe.


void force_update_all_bone_transforms() 🔗

Obsolète : This method should only be called internally.

Force les mises à jour des transformations/poses d'os pour tous les os dans le squelette.


void force_update_bone_child_transform(bone_idx: int) 🔗

Force la mise à jour de la transformation d'os pour l'os à l'index bone_idx et tous ses enfants.


PackedInt32Array get_bone_children(bone_idx: int) const 🔗

Renvoie un tableau contenant les index d'os de tous les nœuds enfants de l'os passé, bone_idx.


int get_bone_count() const 🔗

Renvoie le nombre d'os dans le squelette.


Transform3D get_bone_global_pose(bone_idx: int) const 🔗

Renvoie la transformation "générale" de l'os spécifié, relative au squelette. Comme elle est relative au repère du squelette, ce n'est pas la transformation réelle "globale" de l'os.

Note : C'est la pose globale que définissez au squelette durant le processus, la pose globale finale peut être redéfinie par des modificateurs dans le traitement différé, si vous voulez accéder à la pose globale finale, utilisez SkeletonModifier3D.modification_processed.


Transform3D get_bone_global_pose_no_override(bone_idx: int) const 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Renvoie la transformation "générale" de l'os spécifié, relative au squelette, mais sans redéfinition de pose globale.. Comme elle est relative au repère du squelette, ce n'est pas la transformation réelle "globale" de l'os.


Transform3D get_bone_global_pose_override(bone_idx: int) const 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Renvoie la transformation de la pose globale redéfinie pour bone_idx.


Transform3D get_bone_global_rest(bone_idx: int) const 🔗

Renvoie la transformation au repos global pour bone_idx.


Variant get_bone_meta(bone_idx: int, key: StringName) const 🔗

Returns the metadata with the given key for the bone at index bone_idx.


Array[StringName] get_bone_meta_list(bone_idx: int) const 🔗

Renvoie la liste de toutes les clés de métadonnées pour l'os à l'index bone_idx.


String get_bone_name(bone_idx: int) const 🔗

Renvoie le nom de l'os à l'index bone_idx.


int get_bone_parent(bone_idx: int) const 🔗

Renvoie l'index de l'os qui est le parent de l'os à l'index bone_idx. Si -1, alors l'os n'a pas de parent.

Note : L'os parent renvoyé sera toujours inférieur à bone_idx.


Transform3D get_bone_pose(bone_idx: int) const 🔗

Renvoie la transformation de la pose de l'os spécifié.

Note : C'est la pose que vous définissez au squelette avant le traitement, la pose finale peut être redéfinie par des modificateurs durant le traitement différé. Si vous voulez accéder à la pose finale, utilisez SkeletonModifier3D.modification_processed.


Vector3 get_bone_pose_position(bone_idx: int) const 🔗

Renvoie la position de pose de l'os à l'index bone_idx. Le Vector3 renvoyé est dans l'espace de coordonnées local du nœud Skeleton3D.


Quaternion get_bone_pose_rotation(bone_idx: int) const 🔗

Renvoie la rotation de pose de l'os à l'index bone_idx. Le Quaternion renvoyé est local à l'os par rapport à la rotation des os parents.


Vector3 get_bone_pose_scale(bone_idx: int) const 🔗

Renvoie l'échelle de la pose de l'os à l'index bone_idx.


Transform3D get_bone_rest(bone_idx: int) const 🔗

Renvoie la transformation de repos pour l'os d'index bone_idx.


StringName get_concatenated_bone_names() const 🔗

Renvoie tous les noms d'os concaténés avec des virgules (,), en un seul StringName.

Il est utile de le définir comme un indice pour la propriété enum.


PackedInt32Array get_parentless_bones() const 🔗

Renvoie un tableau avec tous les os qui sont sans parent. Une autre façon de regarder ceci est qu'il renvoie les index de tous les os qui ne sont pas dépendants ou modifiés par d'autres os dans le squelette.


int get_version() const 🔗

Renvoie le nombre de fois que la hiérarchie des os a changé dans ce squelette, y compris les renommages.

La version du squelette n'est pas sérialisée : utilisez uniquement dans une seule instance de Skeleton3D.

Utilisez la pour invalider les caches dans les solveur d'IK et autres nœuds qui traitent les os.


bool has_bone_meta(bone_idx: int, key: StringName) const 🔗

Returns true if the bone at index bone_idx has metadata with the given key.


bool is_bone_enabled(bone_idx: int) const 🔗

Renvoie si la pose de l'os pour l'os à l'index bone_idx est activée.


void localize_rests() 🔗

Retourne tous les os dans le squelette à leurs poses de repos.


void physical_bones_add_collision_exception(exception: RID) 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Ajoute une exception de collision à l'os physique.

Fonctionne comme le nœud RigidBody3D.


void physical_bones_remove_collision_exception(exception: RID) 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Supprime une exception de collision à l'os physique.

Fonctionne comme le nœud RigidBody3D.


void physical_bones_start_simulation(bones: Array[StringName] = []) 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Indique aux nœuds PhysicalBone3D du Skeleton de commencer à simuler et à réagir au monde physique.

Optionnellement, une liste de noms d'os peut être transmise, permettant seulement aux os transmis d'être simulés.


void physical_bones_stop_simulation() 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Indique aux nœuds PhysicalBone3D du Skeleton d'arrêter de simuler.


SkinReference register_skin(skin: Skin) 🔗

Lie la Skin donnée au Skeleton.


void reset_bone_pose(bone_idx: int) 🔗

Définit la pose de l'os au repos pour l'os d'index bone_idx.


void reset_bone_poses() 🔗

Définit toutes les poses d'os à celles de repos.


void set_bone_enabled(bone_idx: int, enabled: bool = true) 🔗

Désactive la pose pour l'os à l'index bone_idx si false, active la pose de l'os si true.


void set_bone_global_pose(bone_idx: int, pose: Transform3D) 🔗

Sets the global pose transform, pose, for the bone at bone_idx.

Note: If other bone poses have been changed, this method executes a dirty poses recalculation and will cause performance to deteriorate. If you know that multiple global poses will be applied, consider using set_bone_pose() with precalculation.


void set_bone_global_pose_override(bone_idx: int, pose: Transform3D, amount: float, persistent: bool = false) 🔗

Obsolète : Cette méthode peut être changée ou retirée dans de futures versions.

Sets the global pose transform, pose, for the bone at bone_idx.

amount is the interpolation strength that will be used when applying the pose, and persistent determines if the applied pose will remain.

Note: The pose transform needs to be a global pose! To convert a world transform from a Node3D to a global bone pose, multiply the Transform3D.affine_inverse() of the node's Node3D.global_transform by the desired world transform.


void set_bone_meta(bone_idx: int, key: StringName, value: Variant) 🔗

Sets the metadata with the given key to value for the bone at index bone_idx.


void set_bone_name(bone_idx: int, name: String) 🔗

Définit le nom de l'os, name, pour l'os à l'index bone_idx.


void set_bone_parent(bone_idx: int, parent_idx: int) 🔗

Définit l'os d'index parent_idx comme parent de l'os à l'index bone_idx. Si -1, alors l'os n'a pas de parent.

Note : parent_idx doit être inférieur à bone_idx.


void set_bone_pose(bone_idx: int, pose: Transform3D) 🔗

Définit la transformation de pose, pose, pour l'os à l'index bone_idx.


void set_bone_pose_position(bone_idx: int, position: Vector3) 🔗

Définit la position de pose de l'os à l'index bone_idx à position. position est un Vector3 décrivant une position locale par rapport au nœud Skeleton3D.


void set_bone_pose_rotation(bone_idx: int, rotation: Quaternion) 🔗

Définit la rotation de pose de l'os à l'index bone_idx à rotation. rotation est un Quaternion décrivant une rotation dans l'espace de coordonnées local de l'os par rapport à la rotation des os parents.


void set_bone_pose_scale(bone_idx: int, scale: Vector3) 🔗

Définit l'échelle de pose de l'os à l'index bone_idx à scale.


void set_bone_rest(bone_idx: int, rest: Transform3D) 🔗

Définit la transformation au repos pour l'os bone_idx.


void unparent_bone_and_rest(bone_idx: int) 🔗

Déparente l'os à l'index bone_idx et fixe sa position de repos à celle de son parent avant d'être réinitialisé.