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

Eredita: Node3D < Node < Object

Un nodo contenente una gerarchia di ossa, utilizzato per creare un'animazione scheletrica in 3D.

Descrizione

Skeleton3D fornisce un'interfaccia per gestire una gerarchia di ossa, tra cui posa, riposo e animazione (vedi Animation). Può anche usare la fisica di ragdoll.

La trasformazione complessiva di un osso rispetto allo scheletro è determinata dalla posa dell'osso. Il riposo dell'osso definisce la trasformazione iniziale della posa dell'osso.

Nota che "posa globale" di seguito si riferisce alla trasformazione complessiva dell'osso rispetto allo scheletro, quindi non è la trasformazione globale/mondiale effettiva dell'osso.

Tutorial

Proprietà

bool

animate_physical_bones

true

ModifierCallbackModeProcess

modifier_callback_mode_process

1

float

motion_scale

1.0

bool

show_rest_only

false

Metodi

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)


Segnali

bone_enabled_changed(bone_idx: int) 🔗

Emesso quando l'osso all'indice bone_idx viene attivato con set_bone_enabled(). Usa is_bone_enabled() per verificare il nuovo valore.


bone_list_changed() 🔗

Emesso quando la lista delle ossa cambia, ad esempio quando si chiama add_bone(), set_bone_parent(), unparent_bone_and_rest() o clear_bones().


pose_updated() 🔗

Emesso quando la posa viene aggiornata.

Nota: Durante il processo di aggiornamento, questo segnale non viene attivato, quindi la modificazione da uno SkeletonModifier3D non viene rilevata.


rest_updated() 🔗

Emesso quando le pose di riposo vengono aggiornate.


show_rest_only_changed() 🔗

Emesso quando il valore di show_rest_only cambia.


skeleton_updated() 🔗

Emesso quando la posa finale è stata calcolata e verrà applicata alla skin nel processo di aggiornamento.

Ciò significa che tutta l'elaborazione dello SkeletonModifier3D è completa. Per rilevare il completamento dell'elaborazione di ogni SkeletonModifier3D, usa SkeletonModifier3D.modification_processed.


Enumerazioni

enum ModifierCallbackModeProcess: 🔗

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_PHYSICS = 0

Imposta un flag per elaborare le modificazioni durante i frame di fisica (vedi Node.NOTIFICATION_INTERNAL_PHYSICS_PROCESS).

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_IDLE = 1

Imposta un flag per elaborare le modificazioni durante i frame di processo (vedi Node.NOTIFICATION_INTERNAL_PROCESS).

ModifierCallbackModeProcess MODIFIER_CALLBACK_MODE_PROCESS_MANUAL = 2

Non elaborare la modificazione. Utilizza advance() per elaborare la modificazione manualmente.


Costanti

NOTIFICATION_UPDATE_SKELETON = 50 🔗

Notifica ricevuta quando la posa di questo scheletro deve essere aggiornata. In tal caso, viene chiamata solo una volta per frame in un processo differito.


Descrizioni delle proprietà

bool animate_physical_bones = true 🔗

  • void set_animate_physical_bones(value: bool)

  • bool get_animate_physical_bones()

Deprecato: Questa proprietà potrebbe essere cambiata o rimossa in versioni future.

Se segui il flusso di lavoro consigliato e hai esplicitamente PhysicalBoneSimulator3D come figlio di Skeleton3D, puoi controllare se è influenzato dalla proiezione dei raggi senza eseguire physical_bones_start_simulation(), tramite il suo SkeletonModifier3D.active.

Tuttavia, per le vecchie (obsolete) configurazioni, Skeleton3D ha un PhysicalBoneSimulator3D virtuale interno per compatibilità. Questa proprietà controlla il SkeletonModifier3D.active del PhysicalBoneSimulator3D virtuale interno.


ModifierCallbackModeProcess modifier_callback_mode_process = 1 🔗

Imposta i tempi di elaborazione per il Modificatore.


float motion_scale = 1.0 🔗

  • void set_motion_scale(value: float)

  • float get_motion_scale()

Moltiplica l'animazione della traccia di posizione 3D.

Nota: A meno che questo valore non sia 1.0, il valore chiave nell'animazione non corrisponderà al valore di posizione effettivo.


bool show_rest_only = false 🔗

  • void set_show_rest_only(value: bool)

  • bool is_show_rest_only()

Se true, forza le ossa nelle loro pose di riposo predefinite, a prescindere dai loro valori. Nell'editor, questo impedisce anche che le ossa siano modificate.


Descrizioni dei metodi

int add_bone(name: String) 🔗

Aggiunge un nuovo osso con il nome specificato. Restituisce l'indice del nuovo osso o -1 se questo metodo fallisce.

Nota: I nomi degli ossi devono essere univoci, non vuoti e non possono includere i caratteri : e /.


void advance(delta: float) 🔗

Avanza manualmente gli SkeletonModifier3D figlio del tempo specificato (in secondi).

Nota: Il delta è temporaneamente accumulato nello Skeleton3D e il processo differito utilizza il valore accumulato per elaborare la modificazione.


void clear_bones() 🔗

Elimina tutte le ossa da questo scheletro.


void clear_bones_global_pose_override() 🔗

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Rimuove la sostituzione della posa globale su tutte le ossa dello scheletro.


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 🔗

Restituisce l'indice dell'osso che ha name come il suo nome. Restituisce -1 se non esiste nessun osso con questo nome.


void force_update_all_bone_transforms() 🔗

Deprecato: This method should only be called internally.

Forza l'aggiornamento delle trasformazioni e pose per tutte le ossa nello scheletro.


void force_update_bone_child_transform(bone_idx: int) 🔗

Forza l'aggiornamento della trasformazione per l'osso all'indice bone_idx e per tutte le sue ossa figlio.


PackedInt32Array get_bone_children(bone_idx: int) const 🔗

Restituisce un array contenente gli indici delle ossa di tutti il nodo figli dell'osso passato con l'indice bone_idx.


int get_bone_count() const 🔗

Restituisce il numero di ossa nello scheletro.


Transform3D get_bone_global_pose(bone_idx: int) const 🔗

Restituisce la trasformazione complessiva dell'osso specificato, rispetto allo scheletro. Essendo relativa alla struttura dello scheletro, questa non è la trasformazione "globale" effettiva dell'osso.

Nota: Questa è la posa globale che imposti sullo scheletro nel processo, la posa globale finale può essere sovrascritta dai modificatori nel processo differito, se vuoi accedere alla posa globale finale, usa SkeletonModifier3D.modification_processed.


Transform3D get_bone_global_pose_no_override(bone_idx: int) const 🔗

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Restituisce la trasformazione complessiva dell'osso specificato, rispetto allo scheletro, ma senza alcuna sostituzione di posa globale. Essendo relativa alla struttura dello scheletro, questa non è la trasformazione "globale" effettiva dell'osso.


Transform3D get_bone_global_pose_override(bone_idx: int) const 🔗

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Restituisce la trasformazione di sostituzione della posa globale per l'indice bone_idx.


Transform3D get_bone_global_rest(bone_idx: int) const 🔗

Restituisce la trasformazione di riposo globale per 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 🔗

Restituisce la lista di tutte le chiavi dei metadati per l'osso all'indice bone_idx.


String get_bone_name(bone_idx: int) const 🔗

Restituisce il nome dell'osso all'indice bone_idx.


int get_bone_parent(bone_idx: int) const 🔗

Restituisce l'indice dell'osso che è il genitore dell'osso all'indice bone_idx. Se -1, l'osso non ha un genitore.

Nota: L'osso genitore restituito sarà sempre inferiore a bone_idx.


Transform3D get_bone_pose(bone_idx: int) const 🔗

Restituisce la trasformazione della posa dell'osso specificato.

Nota: Questa è la posa che imposti allo scheletro nel processo, la posa finale può essere sovrascritta dai modificatori nel processo differito, se vuoi accedere alla posa finale, usa SkeletonModifier3D.modification_processed.


Vector3 get_bone_pose_position(bone_idx: int) const 🔗

Restituisce la posizione della posa dell'osso all'indice bone_idx. Il Vector3 di ritorno è nello spazio di coordinate locale del nodo Skeleton3D.


Quaternion get_bone_pose_rotation(bone_idx: int) const 🔗

Restituisce la rotazione della posa dell'osso all'indice bone_idx. Il Quaternion restituito è locale all'osso rispetto alla rotazione di qualsiasi osso genitore.


Vector3 get_bone_pose_scale(bone_idx: int) const 🔗

Restituisce la scala di posa dell'osso all'indice bone_idx.


Transform3D get_bone_rest(bone_idx: int) const 🔗

Restituisce la trasformazione di riposo per l'osso all'indice bone_idx.


StringName get_concatenated_bone_names() const 🔗

Restituisce tutti i nomi delle ossa concatenati con virgole (,) come un singolo StringName.

È utile impostarlo come indicazione per la proprietà enumerata.


PackedInt32Array get_parentless_bones() const 🔗

Restituisce un array con tutte le ossa che sono senza genitori. Un altro modo di vedere questo metodo è che restituisce gli indici di tutte le ossa che non sono dipendenti o modificate da altre ossa nello scheletro.


int get_version() const 🔗

Restituisce il numero di volte in cui la gerarchia delle ossa è cambiata all'interno di questo scheletro, incluse le ossa rinominate.

La versione dello scheletro non è serializzata: usala solo all'interno di una singola istanza di Skeleton3D.

Utilizzabile per invalidare le cache nei risolutori IK e altri nodi che elaborano le ossa.


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 🔗

Restituisce se la posa dell'osso per l'osso all'indice bone_idx è abilitata.


void localize_rests() 🔗

Ripristina tutte le ossa nello scheletro alle loro pose di riposo.


void physical_bones_add_collision_exception(exception: RID) 🔗

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Aggiunge un'eccezione di collisione all'osso fisico.

Funziona esattamente come il nodo RigidBody3D.


void physical_bones_remove_collision_exception(exception: RID) 🔗

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Rimuove un'eccezione di collisione dall'osso fisico.

Funziona esattamente come il nodo RigidBody3D.


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

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Indica ai nodi PhysicalBone3D nello scheletro di iniziare a simulare e reagire al mondo fisico.

Facoltativamente, è possibile passare una lista di nomi di ossa, consentendo solo alle ossa passate di essere simulate.


void physical_bones_stop_simulation() 🔗

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Indica ai nodi PhysicalBone3D nello scheletro di interrompere la simulazione.


SkinReference register_skin(skin: Skin) 🔗

Associa la Skin fornita allo scheletro.


void reset_bone_pose(bone_idx: int) 🔗

Imposta la posa dell'osso a quella di riposo per l'indice bone_idx.


void reset_bone_poses() 🔗

Imposta tutte le posizioni delle ossa come riposi.


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

Disabilita la posa per l'osso all'indice bone_idx se false, abilita la posa dell'osso se true.


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

Imposta la trasformazione della posa globale, pose, per l'osso all'indice bone_idx.

Nota: Se sono state modificate altre pose dell'osso, questo metodo esegue un ricalcolo delle pose sporche e causerà un deterioramento delle prestazioni. Se sai che verranno applicate più pose globali, prendi in considerazione l'utilizzo di set_bone_pose() con precalcolo.


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

Deprecato: Questo metodo potrebbe essere cambiato o rimosso in versioni future.

Imposta la trasformazione della posa globale, pose, per l'osso all'indice bone_idx.

amount è la forza di interpolazione che sarà usata quando si applica la posa, e persistent determina se la posa applicata rimarrà.

Nota: La trasformazione della posa deve essere una posa globale! Per convertire una trasformazione del mondo da un Node3D a una posa dell'osso globale, moltiplica il Transform3D.affine_inverse() del Node3D.global_transform del nodo per la trasformazione mondiale desiderata.


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) 🔗

Imposta il nome dell'osso a name per l'osso all'indice bone_idx.


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

Imposta l'osso all'indice parent_idx come genitore dell'osso all'indice bone_idx. Se -1, l'osso non ha genitore.

Nota: parent_idx deve essere minore di bone_idx.


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

Imposta la trasformazione della posa a pose per l'osso all'indice bone_idx.


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

Imposta la posizione di posa dell'osso all'indice bone_idx su position. position è un Vector3 che descrive una posizione locale al nodo Skeleton3D.


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

Imposta la rotazione della posa dell'osso all'indice bone_idx su rotation. rotation è un Quaternion che descrive una rotazione nello spazio di coordinate locale dell'osso rispetto alla rotazione di qualsiasi osso genitore.


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

Imposta la scala di posa dell'osso all'indice bone_idx a scale.


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

Imposta la trasformazione di riposto per osso all'indice bone_idx.


void unparent_bone_and_rest(bone_idx: int) 🔗

Rimuove l'osso all'indice bone_idx dal suo genitore, e imposta la sua posizione di riposo su quella del suo genitore prima di essere reimpostato.