SkeletonIK3D
已弃用: This class may be changed or removed in future versions.
继承: SkeletonModifier3D < Node3D < Node < Object
可以将 Skeleton3D 骨骼链中的所有骨骼进行旋转,从而将末端骨骼放置在正确的 3D 位置的节点。
描述
SkeletonIK3D 可以将 Skeleton3D 骨骼链中的所有骨骼进行旋转,从而将末端骨骼放置在正确的 3D 位置。游戏中 IK 的典型场景是将角色的脚放在地面上,或者将角色的手放在当前持有的物体上。SkeletonIK 在内部使用 FabrikInverseKinematic 来解决骨骼链,并将结果应用于 Skeleton3D bones_global_pose_override
属性中所有受影响的骨骼链。如果完全应用,这将覆盖任何来自 Animation 的骨骼变换或用户设置的骨骼自定义姿势。应用量可以用 SkeletonModifier3D.influence 属性来控制。
# 在每一个新的帧上自动应用 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_influence(1.0)
# 应用一半的 IK 效果
skeleton_ik_node.set_influence(0.5)
# 应用零 IK 效果(数值为 0.01 或低于 0.01 也会移除 Skeleton 上的 bones_global_pose_override)
skeleton_ik_node.set_influence(0.0)
属性
| ||
| ||
| ||
| ||
| ||
| ||
| ||
| ||
|
方法
get_parent_skeleton() const | |
void | |
void | stop() |
属性说明
已弃用: Use SkeletonModifier3D.influence instead.
IK 效果被应用于当前骨架骨骼链的程度的插值。1.0
的值将完全覆盖所有骨架骨骼变换,而 0.0
的值将在视觉上禁用 SkeletonIK。
Vector3 magnet = Vector3(0, 0, 0)
🔗
IK 链的次要目标位置(首先是 target 属性或 target_node)。使用磁铁位置(极点目标)来控制 IK 链的弯曲。仅当骨骼链具有 2 个以上的骨骼时才有效。中间链骨位置将与磁铁位置进行线性插值。
IK解算器使用的迭代循环的数量,以产生更准确(和优雅)的骨链效果。
骨骼与目标对象之间的最小距离。如果距离低于这个值,IK解算器将停止进一步的迭代。
bool override_tip_basis = true
🔗
如果为 true
,则用 target(或者如果定义了 target_node])的旋转覆盖尖端骨骼的旋转。
StringName root_bone = &""
🔗
void set_root_bone(value: StringName)
StringName get_root_bone()
当前的根骨骼的名称,即 IK 链中的第一条骨骼。
Transform3D target = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
🔗
void set_target_transform(value: Transform3D)
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(value: StringName)
StringName get_tip_bone()
当前尖端骨骼的名称,IK 链中放置在 target 变换处的最后一个骨骼(或者已定义 target_node)。
如果为 true
,指示 IK 求解器在解算器链时考虑次要磁铁目标(极点目标)。使用磁铁位置(磁极目标)来控制 IK 链的弯曲。
方法说明
Skeleton3D get_parent_skeleton() const 🔗
返回 SkeletonIK 进入 SceneTree 时存在的父级 Skeleton3D 节点。如果 SkeletonIK3D 进入 SceneTree 时父节点不是 Skeleton3D 节点,则返回 null。
如果 SkeletonIK 正将 IK 效果应用到 Skeleton3D 骨骼的连续帧上,则返回 true
。如果 SkeletonIK 被停止或 start 被使用时 one_time
参数被设置为 true
,则返回 false
。
void start(one_time: bool = false) 🔗
开始将 IK 效果应用到每一帧的 Skeleton3D 骨骼,但只会在下一帧开始生效。如果 one_time
为 true
则将立即生效,但仍会在下一帧重置。
void stop() 🔗
停止将 IK 效果应用到每帧的 Skeleton3D 骨骼,并调用 Skeleton3D.clear_bones_global_pose_override 来移除所有骨骼上的现有覆盖。