SkeletonIK

Inherits: Node < Object

SkeletonIK用于将Skeleton骨链的末端骨骼置于3D中的某一点,并相应地旋转骨链中的所有骨骼。

描述

SkeletonIK用于将Skeleton骨链的末端骨骼放置在3D某一点上,并相应地旋转骨链中的所有骨骼。游戏中IK的典型场景是将角色的脚放在地面上,或者将角色的手放在当前持有的物体上。SkeletonIK在内部使用FabrikInverseKinematic来解决骨骼链,并将结果应用于Skeleton bones_global_pose_override属性中所有受影响的骨骼链。如果完全应用,这将覆盖任何来自Animation的骨骼变换或用户设置的骨骼自定义姿势。应用量可以用interpolation属性来控制。

  1. # 在每一个新的帧上自动应用IK效果(不是当前的)。
  2. skeleton_ik_node.start()
  3. # 只在当前帧上应用IK效果
  4. skeleton_ik_node.start(true)
  5. # 停止IK效果并重置骨骼上的bones_global_pose_override
  6. skeleton_ik_node.stop()
  7. # 应用完整的IK效果
  8. skeleton_ik_node.set_interpolation(1.0)
  9. # 应用一半的IK效果
  10. skeleton_ik_node.set_interpolation(0.5)
  11. # 应用零IK效果(数值为0.01或低于0.01也会移除骨骼上的bones_global_pose_override)。
  12. skeleton_ik_node.set_interpolation(0.0)

教程

属性

float

interpolation

1.0

Vector3

magnet

Vector3( 0, 0, 0 )

int

max_iterations

10

float

min_distance

0.01

bool

override_tip_basis

true

String

root_bone

“”

Transform

target

Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )

NodePath

target_node

NodePath(“”)

String

tip_bone

“”

bool

use_magnet

false

方法

Skeleton

get_parent_skeleton ( ) const

bool

is_running ( )

void

start ( bool one_time=false )

void

stop ( )

属性说明

Default

1.0

Setter

set_interpolation(value)

Getter

get_interpolation()

IK 效果应用于当前骨架骨骼链的插值。 1.0 的值将完全覆盖所有骨架骨骼变换,而 0.0 的值将在视觉上禁用 SkeletonIK。等于或低于 0.01 的值也调用 Skeleton.clear_bones_global_pose_override


Default

Vector3( 0, 0, 0 )

Setter

set_magnet_position(value)

Getter

get_magnet_position()

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


  • int max_iterations

Default

10

Setter

set_max_iterations(value)

Getter

get_max_iterations()

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


Default

0.01

Setter

set_min_distance(value)

Getter

get_min_distance()

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


  • bool override_tip_basis

Default

true

Setter

set_override_tip_basis(value)

Getter

is_override_tip_basis()

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


Default

“”

Setter

set_root_bone(value)

Getter

get_root_bone()

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


Default

Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )

Setter

set_target_transform(value)

Getter

get_target_transform()

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


Default

NodePath(“”)

Setter

set_target_node(value)

Getter

get_target_node()

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


Default

“”

Setter

set_tip_bone(value)

Getter

get_tip_bone()

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


Default

false

Setter

set_use_magnet(value)

Getter

is_using_magnet()

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

方法说明

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


  • bool is_running ( )

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


  • void start ( bool one_time=false )

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


  • void stop ( )

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