SkeletonIK
SkeletonIK用于将Skeleton骨链的末端骨骼置于3D中的某一点,并相应地旋转骨链中的所有骨骼。
描述
SkeletonIK用于将Skeleton骨链的末端骨骼放置在3D某一点上,并相应地旋转骨链中的所有骨骼。游戏中IK的典型场景是将角色的脚放在地面上,或者将角色的手放在当前持有的物体上。SkeletonIK在内部使用FabrikInverseKinematic来解决骨骼链,并将结果应用于Skeleton 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也会移除骨骼上的bones_global_pose_override)。
skeleton_ik_node.set_interpolation(0.0)
教程
属性
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
方法
get_parent_skeleton ( ) const | |
is_running ( ) | |
void | |
void | stop ( ) |
属性说明
- float interpolation
Default |
|
Setter | set_interpolation(value) |
Getter | get_interpolation() |
IK 效果应用于当前骨架骨骼链的插值。 1.0
的值将完全覆盖所有骨架骨骼变换,而 0.0
的值将在视觉上禁用 SkeletonIK。等于或低于 0.01
的值也调用 Skeleton.clear_bones_global_pose_override。
- Vector3 magnet
Default |
|
Setter | set_magnet_position(value) |
Getter | get_magnet_position() |
IK 链的次要目标位置(首先是 target 属性或 target_node)。使用磁铁位置(极点目标)来控制 IK 链的弯曲。仅当骨骼链具有 2 个以上的骨骼时才有效。中间链骨位置将与磁铁位置进行线性插值。
- int max_iterations
Default |
|
Setter | set_max_iterations(value) |
Getter | get_max_iterations() |
IK解算器使用的迭代循环的数量,以产生更准确(和优雅)的骨链效果。
- float min_distance
Default |
|
Setter | set_min_distance(value) |
Getter | get_min_distance() |
骨骼与目标对象之间的最小距离。如果距离低于这个值,IK解算器将停止进一步的迭代。
- bool override_tip_basis
Default |
|
Setter | set_override_tip_basis(value) |
Getter | is_override_tip_basis() |
如果true
,则用 target (或者如果定义了target_node])的旋转覆盖尖端骨骼的旋转。
- String root_bone
Default |
|
Setter | set_root_bone(value) |
Getter | get_root_bone() |
当前根骨的名称,即IK链中的第一个骨。
- Transform target
Default |
|
Setter | set_target_transform(value) |
Getter | get_target_transform() |
放置尖端骨骼的 IK 链的第一个目标,如果 override_tip_basis 是 true
,尖端骨骼的旋转方式。如果 target_node 路径可用,则使用节点变换,并忽略此属性。
- NodePath target_node
Default |
|
Setter | set_target_node(value) |
Getter | get_target_node() |
IK链的目标节点NodePath。如果有的话,将使用节点当前的Transform,而不是target属性。
- String tip_bone
Default |
|
Setter | set_tip_bone(value) |
Getter | get_tip_bone() |
当前尖端骨骼的名称,IK 链中放置在 target 变换处的最后一个骨骼(或者已定义 target_node)。
- bool use_magnet
Default |
|
Setter | set_use_magnet(value) |
Getter | is_using_magnet() |
如果true
,指示IK求解器在解算器链时考虑次要磁铁目标(极点目标)。使用磁铁位置(磁极目标)来控制IK链的弯曲。
方法说明
- Skeleton get_parent_skeleton ( ) const
返回 SkeletonIK 进入 SceneTree 时存在的父 Skeleton 节点。如果父节点在 SkeletonIK 进入 SceneTree 时不是 Skeleton 节点,则返回 null。
- bool is_running ( )
如果 SkeletonIK 将 IK 效果应用到 Skeleton 骨骼的连续帧上,则返回 true
。如果 SkeletonIK 停止或使用 start 且 one_time
参数设置为 true
,则返回 false
。
- void start ( bool one_time=false )
开始将 IK 效果应用到每一帧的 Skeleton 骨骼,但只会在下一帧开始生效。如果 one_time
为 true
,这将立即生效,但会在下一帧重置。
- void stop ( )
停止将 IK 效果应用到每帧的 Skeleton 骨骼,并调用 Skeleton.clear_bones_global_pose_override 以移除所有骨骼上的现有覆盖。