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.

SkeletonIK3D

Deprecato: This class may be changed or removed in future versions.

Eredita: SkeletonModifier3D < Node3D < Node < Object

Un nodo utilizzato per ruotare tutte le ossa di una catena ossea Skeleton3D in modo da posizionare l'osso finale nella posizione 3D desiderata.

Descrizione

SkeletonIK3D serve per ruotare tutte le ossa di una catena d'ossa di uno Skeleton3D in modo da posizionare l'osso finale in una posizione 3D desiderata. Uno scenario tipico per un IK nei giochi è quello di posizionare i piedi di un personaggio a terra o le mani di un personaggio su un oggetto mantenuto. SkeletonIK utilizza FabrikInverseKinematic internamente per risolvere la catena d'ossa e applica il risultato alla proprietà Skeleton3D bones_global_pose_override per tutte le ossa influenzate nella catena. Se applicato completamente, ciò sovrascrive qualsiasi trasformazione delle ossa dalle Animation o pose personalizzate delle ossa impostate dagli utenti. La quantità applicata può essere controllata con la proprietà SkeletonModifier3D.influence.

# Applica l'effetto IK automaticamente a ogni nuova frame (non l'attuale)
skeleton_ik_node.start()

# Applica l'effetto IK solo per la frame attuale
skeleton_ik_node.start(true)

# Interrompe l'effetto IK e ripristina bones_global_pose_override sullo scheletro
skeleton_ik_node.stop()

# Applica l'effetto IK completamente
skeleton_ik_node.set_influence(1.0)

# Applica l'effetto IK a metà
skeleton_ik_node.set_influence(0.5)

# Applica nessun effetto IK (anche un valore uguale o minore di 0.01 rimuove bones_global_pose_override sullo scheletro)
skeleton_ik_node.set_influence(0.0)

Proprietà

float

interpolation

Vector3

magnet

Vector3(0, 0, 0)

int

max_iterations

10

float

min_distance

0.01

bool

override_tip_basis

true

StringName

root_bone

&""

Transform3D

target

Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)

NodePath

target_node

NodePath("")

StringName

tip_bone

&""

bool

use_magnet

false

Metodi

Skeleton3D

get_parent_skeleton() const

bool

is_running()

void

start(one_time: bool = false)

void

stop()


Descrizioni delle proprietà

float interpolation 🔗

  • void set_interpolation(value: float)

  • float get_interpolation()

Deprecato: Use SkeletonModifier3D.influence instead.

Valore di interpolazione per quanto i risultati IK sono applicati alla catena ossea dello scheletro attuale. Un valore di 1.0 sovrascriverà completamente tutte le trasformazioni ossee dello scheletro mentre un valore di 0.0 disabiliterà visivamente lo SkeletonIK.


Vector3 magnet = Vector3(0, 0, 0) 🔗

  • void set_magnet_position(value: Vector3)

  • Vector3 get_magnet_position()

Posizione di destinazione secondaria (la prima è la proprietà target o target_node) per la catena IK. Usa la posizione del magnete (destinazione del polo) per controllare la flessione della catena IK. Funziona solo se la catena ossea ha più di 2 ossa. La posizione dell'osso della catena centrale sarà interpolata linearmente con la posizione del magnete.


int max_iterations = 10 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

Numero di cicli di iterazione utilizzati dal risolutore IK per produrre risultati più accurati (ed eleganti) sulla catena ossea.


float min_distance = 0.01 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

La distanza minima tra l'osso e la destinazione. Se la distanza è inferiore a questo valore, il risolutore IK interrompe ulteriori iterazioni.


bool override_tip_basis = true 🔗

  • void set_override_tip_basis(value: bool)

  • bool is_override_tip_basis()

Se true sovrascrive la rotazione dell'osso della punta con la rotazione del target (o target_node se definito).


StringName root_bone = &"" 🔗

Il nome dell'osso radice attuale, il primo osso nella catena IK.


Transform3D target = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) 🔗

Prima destinazione della catena IK in cui è posizionato l'osso della punta e, se override_tip_basis è true, come viene ruotato l'osso della punta. Se è disponibile un percorso target_node, la trasformazione dei nodi è usata e questa proprietà viene ignorata.


NodePath target_node = NodePath("") 🔗

Il NodePath del nodo di destinazione] per la catena IK. Se disponibile, è utilizzato il Transform3D attuale del nodo al posto della proprietà target.


StringName tip_bone = &"" 🔗

Il nome dell'osso della punta attuale, l'ultimo osso nella catena IK posizionato nella trasformazione di target (o target_node se definito).


bool use_magnet = false 🔗

  • void set_use_magnet(value: bool)

  • bool is_using_magnet()

Se true, istruisce il risolutore IK a considerare la destinazione del magnete secondario (destinazione del polo) quando calcola la catena ossea. Usa la posizione del magnete (destinazione del polo) per controllare la flessione della catena IK.


Descrizioni dei metodi

Skeleton3D get_parent_skeleton() const 🔗

Restituisce il nodo Skeleton3D genitore che era presente quando questo SkeletonIK è entrato nell'albero di scene. Restituisce null se il nodo genitore non era un nodo Skeleton3D quando lo SkeletonIK3D è entrato nell'albero di scene.


bool is_running() 🔗

Restituisce true se SkeletonIK sta applicando effetti IK su frame continui alle ossa Skeleton3D. Restituisce false se SkeletonIK è stato arrestato o è stato usato start() con il parametro one_time impostato su true.


void start(one_time: bool = false) 🔗

Inizia ad applicare gli effetti IK su ogni frame alle ossa dello Skeleton3D ma avrà effetto solo a partire dal frame successivo. Se one_time è true, avrà effetto immediatamente ma verrà anche reimpostato sul frame successivo.


void stop() 🔗

Interrompe l'applicazione degli effetti IK su ogni frame alle ossa Skeleton3D e richiama anche Skeleton3D.clear_bones_global_pose_override() per rimuovere le sostituzioni esistenti su tutte le ossa.