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.
Checking the stable version of the documentation...
SkeletonIK3D¶
可以将 Skeleton3D 骨骼链中的所有骨骼进行旋转,从而将末端骨骼放置在正确的 3D 位置的节点。
描述¶
SkeletonIK3D 可以将 Skeleton3D 骨骼链中的所有骨骼进行旋转,从而将末端骨骼放置在正确的 3D 位置。游戏中 IK 的典型场景是将角色的脚放在地面上,或者将角色的手放在当前持有的物体上。SkeletonIK 在内部使用 FabrikInverseKinematic 来解决骨骼链,并将结果应用于 Skeleton3D bones_global_pose_override
属性中所有受影响的骨骼链。如果完全应用,这将覆盖任何来自 Animation 的骨骼变换或用户设置的骨骼自定义姿势。应用量可以用 interpolation 属性来控制。
# 在每一个新的帧上自动应用 IK 效果(不是当前的)。
skeleton_ik_node.start()
# 只在当前帧上应用 IK 效果
skeleton_ik_node.start(true)
# 停止 IK 效果并重置骨骼上的 bones_global_pose_override
skeleton_ik_node.stop()
# 应用完整的 IK 效果
skeleton_ik_node.set_interpolation(1.0)
# 应用一半的 IK 效果
skeleton_ik_node.set_interpolation(0.5)
# 应用零 IK 效果(数值为 0.01 或低于 0.01 也会移除 Skeleton 上的 bones_global_pose_override)。
skeleton_ik_node.set_interpolation(0.0)
已弃用。这个类已废弃,可能在后续版本中移除。
教程¶
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
get_parent_skeleton ( ) const |
|
is_running ( ) |
|
void |
|
void |
stop ( ) |
属性说明¶
float interpolation = 1.0
IK 效果被应用于当前骨架骨骼链的程度的插值。1.0
的值将完全覆盖所有骨架骨骼变换,而 0.0
的值将在视觉上禁用 SkeletonIK。等于或低于 0.01
的值也会调用 Skeleton3D.clear_bones_global_pose_override。
Vector3 magnet = Vector3(0, 0, 0)
IK 链的次要目标位置(首先是 target 属性或 target_node)。使用磁铁位置(极点目标)来控制 IK 链的弯曲。仅当骨骼链具有 2 个以上的骨骼时才有效。中间链骨位置将与磁铁位置进行线性插值。
int max_iterations = 10
IK解算器使用的迭代循环的数量,以产生更准确(和优雅)的骨链效果。
float min_distance = 0.01
骨骼与目标对象之间的最小距离。如果距离低于这个值,IK解算器将停止进一步的迭代。
bool override_tip_basis = true
如果为 true
,则用 target(或者如果定义了 target_node])的旋转覆盖尖端骨骼的旋转。
StringName root_bone = &""
void set_root_bone ( StringName value )
StringName get_root_bone ( )
当前的根骨骼的名称,即 IK 链中的第一条骨骼。
Transform3D target = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
void set_target_transform ( Transform3D value )
Transform3D get_target_transform ( )
放置尖端骨骼的 IK 链的第一个目标,如果 override_tip_basis 是 true
,尖端骨骼的旋转方式。如果 target_node 路径可用,则使用节点变换,并忽略此属性。
NodePath target_node = NodePath("")
IK 链的目标节点 NodePath。如果有的话,将使用节点当前的 Transform3D,而不是 target 属性。
StringName tip_bone = &""
void set_tip_bone ( StringName value )
StringName get_tip_bone ( )
当前尖端骨骼的名称,IK 链中放置在 target 变换处的最后一个骨骼(或者已定义 target_node)。
bool use_magnet = false
如果为 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 ( bool one_time=false )
开始将 IK 效果应用到每一帧的 Skeleton3D 骨骼,但只会在下一帧开始生效。如果 one_time
为 true
则将立即生效,但仍会在下一帧重置。
void stop ( )
停止将 IK 效果应用到每帧的 Skeleton3D 骨骼,并调用 Skeleton3D.clear_bones_global_pose_override 来移除所有骨骼上的现有覆盖。