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

Obsolète : This class may be changed or removed in future versions.

Hérite de : SkeletonModifier3D < Node3D < Node < Object

Un nœud utilisé pour faire pivoter tous les os d'une chaîne d'os de Skeleton3D d'une manière qui place l'os final à une position 3D souhaitée.

Description

SkeletonIK3D is used to rotate all bones of a Skeleton3D bone chain a way that places the end bone at a desired 3D position. A typical scenario for IK in games is to place a character's feet on the ground or a character's hands on a currently held object. SkeletonIK uses FabrikInverseKinematic internally to solve the bone chain and applies the results to the Skeleton3D bones_global_pose_override property for all affected bones in the chain. If fully applied, this overwrites any bone transform from Animations or bone custom poses set by users. The applied amount can be controlled with the SkeletonModifier3D.influence property.

# Apply IK effect automatically on every new frame (not the current)
skeleton_ik_node.start()

# Apply IK effect only on the current frame
skeleton_ik_node.start(true)

# Stop IK effect and reset bones_global_pose_override on Skeleton
skeleton_ik_node.stop()

# Apply full IK effect
skeleton_ik_node.set_influence(1.0)

# Apply half IK effect
skeleton_ik_node.set_influence(0.5)

# Apply zero IK effect (a value at or below 0.01 also removes bones_global_pose_override on Skeleton)
skeleton_ik_node.set_influence(0.0)

Propriétés

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

Méthodes

Skeleton3D

get_parent_skeleton() const

bool

is_running()

void

start(one_time: bool = false)

void

stop()


Descriptions des propriétés

float interpolation 🔗

  • void set_interpolation(value: float)

  • float get_interpolation()

Obsolète : Use SkeletonModifier3D.influence instead.

Valeur de l'interpolation indiquant de combien les résultats de l'IK sont appliqués à la chaîne d'os du squelette actuelle. Une valeur de 1.0 écrasera toutes les transformations d'os du squelette complètement alors qu'une valeur de 0.0 désactivera visuellement le SkeletonIK.


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

  • void set_magnet_position(value: Vector3)

  • Vector3 get_magnet_position()

Secondary target position (first is target property or target_node) for the IK chain. Use magnet position (pole target) to control the bending of the IK chain. Only works if the bone chain has more than 2 bones. The middle chain bone position will be linearly interpolated with the magnet position.


int max_iterations = 10 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

Nombre de boucles d'itération utilisées par le résolveur IK pour produire des résultats de chaîne d'os plus précis (et élégants).


float min_distance = 0.01 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

La distance minimale entre l'os et la cible. Si la distance est en dessous de cette valeur, le solveur IK arrête les itérations.


bool override_tip_basis = true 🔗

  • void set_override_tip_basis(value: bool)

  • bool is_override_tip_basis()

Si true, écrase la rotation de l'os du bout avec la rotation de la cible target (ou le nœud cible target_node si il est définie).


StringName root_bone = &"" 🔗

Le nom de l'os racine actuel, le premier os de la chaîne IK.


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

Première cible de la chaîne IK où l'os du bout est placé et, si override_tip_basis vaut true, comment l'os du bout est tourné. Si un chemin target_node est disponible, la transformation des nœuds est utilisée à la place et cette propriété est ignorée.


NodePath target_node = NodePath("") 🔗

NodePath du nœud cible pour la chaîne IK. Si disponible, la Transform3D actuelle du nœud est utilisée au lieu de la propriété target.


StringName tip_bone = &"" 🔗

Le nom de l'os du bout actuel, le dernier os de la chaîne d'IK placé à la transformation target (ou target_node si défini).


bool use_magnet = false 🔗

  • void set_use_magnet(value: bool)

  • bool is_using_magnet()

Si true, ordonne au solveur IK de considérer la cible magnétique secondaire (cible du pôle) lors du calcul de la chaîne d'os. Utilisez la position de l'aimant (cible du pôle) pour contrôler la flexion de la chaîne IK.


Descriptions des méthodes

Skeleton3D get_parent_skeleton() const 🔗

Renvoie le nœud parent Skeleton3D qui était présent lorsque SkeletonIK est entré dans l'arbre de scène. Renvoie null si le nœud parent n'était pas un nœud Skeleton3D lorsque SkeletonIK3D est entré dans l'arbre de scène.


bool is_running() 🔗

Renvoie true si SkeletonIK applique les effets d'IK sur des trames continues aux os Skeleton3D. Renvoie false si SkeletonIK est arrêté ou start() a été utilisé avec le paramètre one_time défini à true.


void start(one_time: bool = false) 🔗

Commence à appliquer des effets d'IK sur chaque trame aux os Skeleton3D mais ne prendra effet que sur la prochaine trame. Si one_time vaut true, cela prendra effet immédiatement, mais aussi sera réinitialisé sur la prochaine trame.


void stop() 🔗

Arrête d'appliquer les effets d'IK à chaque trame aux os Skeleton3D et appelle également Skeleton3D.clear_bones_global_pose_override() pour supprimer les redéfinitions existantes sur tous les os.