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

已弃用: This class may be changed or removed in future versions.

继承: SkeletonModifier3D < Node3D < Node < Object

可以将 Skeleton3D 骨骼链中的所有骨骼进行旋转,从而将末端骨骼放置在正确的 3D 位置的节点。

描述

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)

属性

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

方法

Skeleton3D

get_parent_skeleton() const

bool

is_running()

void

start(one_time: bool = false)

void

stop()


属性说明

float interpolation 🔗

  • void set_interpolation(value: float)

  • float get_interpolation()

已弃用: Use SkeletonModifier3D.influence instead.

Interpolation value for how much the IK results are applied to the current skeleton bone chain. A value of 1.0 will overwrite all skeleton bone transforms completely while a value of 0.0 will visually disable the SkeletonIK.


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

  • void set_magnet_position(value: Vector3)

  • Vector3 get_magnet_position()

IK 链的次要目标位置(首先是 target 属性或 target_node)。使用磁铁位置(极点目标)来控制 IK 链的弯曲。仅当骨骼链具有 2 个以上的骨骼时才有效。中间链骨位置将与磁铁位置进行线性插值。


int max_iterations = 10 🔗

  • void set_max_iterations(value: int)

  • int get_max_iterations()

IK解算器使用的迭代循环的数量,以产生更准确(和优雅)的骨链效果。


float min_distance = 0.01 🔗

  • void set_min_distance(value: float)

  • float get_min_distance()

骨骼与目标对象之间的最小距离。如果距离低于这个值,IK解算器将停止进一步的迭代。


bool override_tip_basis = true 🔗

  • void set_override_tip_basis(value: bool)

  • bool is_override_tip_basis()

如果为 true,则用 target(或者如果定义了 target_node])的旋转覆盖尖端骨骼的旋转。


StringName root_bone = &"" 🔗

当前的根骨骼的名称,即 IK 链中的第一条骨骼。


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

放置尖端骨骼的 IK 链的第一个目标,如果 override_tip_basistrue,尖端骨骼的旋转方式。如果 target_node 路径可用,则使用节点变换,并忽略此属性。


NodePath target_node = NodePath("") 🔗

IK 链的目标节点 NodePath。如果有的话,将使用节点当前的 Transform3D,而不是 target 属性。


StringName tip_bone = &"" 🔗

当前尖端骨骼的名称,IK 链中放置在 target 变换处的最后一个骨骼(或者已定义 target_node)。


bool use_magnet = false 🔗

  • void set_use_magnet(value: bool)

  • bool is_using_magnet()

如果为 true,指示 IK 求解器在解算器链时考虑次要磁铁目标(极点目标)。使用磁铁位置(磁极目标)来控制 IK 链的弯曲。


方法说明

Skeleton3D get_parent_skeleton() const 🔗

返回 SkeletonIK 进入 SceneTree 时存在的父级 Skeleton3D 节点。如果 SkeletonIK3D 进入 SceneTree 时父节点不是 Skeleton3D 节点,则返回 null。


bool is_running() 🔗

如果 SkeletonIK 正将 IK 效果应用到 Skeleton3D 骨骼的连续帧上,则返回 true。如果 SkeletonIK 被停止或 start 被使用时 one_time 参数被设置为 true,则返回 false


void start(one_time: bool = false) 🔗

开始将 IK 效果应用到每一帧的 Skeleton3D 骨骼,但只会在下一帧开始生效。如果 one_timetrue 则将立即生效,但仍会在下一帧重置。


void stop() 🔗

停止将 IK 效果应用到每帧的 Skeleton3D 骨骼,并调用 Skeleton3D.clear_bones_global_pose_override 来移除所有骨骼上的现有覆盖。