SkeletonIK3D

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

Hereda: SkeletonModifier3D < Node3D < Node < Object

Un nodo usado para rotar todos los huesos de una cadena de huesos de Skeleton3D de tal manera que coloca el hueso final en una posición 3D deseada.

Descripción

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)

Propiedades

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

Skeleton3D

get_parent_skeleton() const

bool

is_running()

void

start(one_time: bool = false)

void

stop()


Descripciones de Propiedades

float interpolation 🔗

  • void set_interpolation(value: float)

  • float get_interpolation()

Obsoleto: Use SkeletonModifier3D.influence instead.

Valor de interpolación de cuánto se aplican los resultados de la IK a la cadena de huesos del esqueleto actual. Un valor de 1.0 sobreescribirá por completo todas las transformaciones de los huesos del esqueleto, mientras que un valor de 0.0 desactivará visualmente el SkeletonIK.


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

  • void set_magnet_position(value: Vector3)

  • Vector3 get_magnet_position()

Posición del objetivo secundario (el primero es la propiedad target o target_node) para la cadena de IK. Usa la posición del imán (objetivo polar) para controlar la flexión de la cadena de IK. Solo funciona si la cadena de huesos tiene más de 2 huesos. La posición del hueso central de la cadena se interpolará linealmente con la posición del imán.


int max_iterations = 10 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

Número de bucles de iteración utilizados por el solucionador de IK para producir resultados más precisos (y elegantes) en la cadena de huesos.


float min_distance = 0.01 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

La distancia mínima entre el hueso y el objetivo. Si la distancia es inferior a este valor, el solucionador de IK detiene las iteraciones posteriores.


bool override_tip_basis = true 🔗

  • void set_override_tip_basis(value: bool)

  • bool is_override_tip_basis()

Si es true, sobrescribe la rotación del hueso de la punta con la rotación del target (o target_node si está definido).


StringName root_bone = &"" 🔗

El nombre del hueso raíz actual, el primer hueso de la cadena de IK.


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

Primer objetivo de la cadena de IK donde se coloca el hueso de la punta y, si override_tip_basis es true, cómo se rota el hueso de la punta. Si hay una ruta de target_node disponible, se utiliza la transformación del nodo en su lugar y se ignora esta propiedad.


NodePath target_node = NodePath("") 🔗

Nodo objetivo NodePath para la cadena de IK. Si está disponible, se utiliza el Transform3D actual del nodo en lugar de la propiedad target.


StringName tip_bone = &"" 🔗

El nombre del hueso de la punta actual, el último hueso de la cadena de IK colocado en la transformación de target (o target_node si está definido).


bool use_magnet = false 🔗

  • void set_use_magnet(value: bool)

  • bool is_using_magnet()

Si es true, instruye al solucionador de IK para que considere el objetivo magnético secundario (objetivo polar) al calcular la cadena de huesos. Usa la posición del imán (objetivo polar) para controlar la flexión de la cadena de IK.


Descripciones de Métodos

Skeleton3D get_parent_skeleton() const 🔗

Devuelve el nodo padre Skeleton3D que estaba presente cuando SkeletonIK entró en el árbol de escenas. Devuelve null si el nodo padre no era un nodo Skeleton3D cuando SkeletonIK3D entró en el árbol de escenas.


bool is_running() 🔗

Devuelve true si SkeletonIK está aplicando efectos de IK en fotogramas continuos a los huesos del Skeleton3D. Devuelve false si SkeletonIK está detenido o si se usó start() con el parámetro one_time establecido en true.


void start(one_time: bool = false) 🔗

Comienza a aplicar efectos de IK en cada fotograma a los huesos del Skeleton3D, pero solo tendrá efecto a partir del siguiente fotograma. Si one_time es true, esto tendrá efecto inmediatamente pero también se reiniciará en el siguiente fotograma.


void stop() 🔗

Deja de aplicar efectos de IK en cada fotograma a los huesos del Skeleton3D y también llama a Skeleton3D.clear_bones_global_pose_override() para eliminar las sobrescrituras existentes en todos los huesos.