SkeletonIK3D¶
已弃用: This class may be changed or removed in future versions.
继承: SkeletonRevamp < Item3D < Item < Object
用于旋转SkeletonMesh骨链的所有骨骼的节点,将末端骨骼放置在所需的3D位置。
描述¶
SkeletonIK3D 用于以一种将末端骨骼放置在所需 3D 位置的方式,旋转 SkeletonMesh 骨骼链的所有骨骼。应用中反向运动学(IK)的一个典型场景是将角色的脚放在地面上,或者将角色的手放在当前持有的物体上。SkeletonIK 在内部使用 FabrikInverseKinematic 来求解骨骼链,并将结果应用于骨骼链中所有受影响骨骼的 SkeletonMesh 的 bones_global_pose_override 属性。如果完全应用,这将覆盖 Animation 中的任何骨骼变换或用户设置的骨骼自定义姿势。应用的程度可以通过 SkeletonRevamp.influence 属性进行控制。
# 在每一新帧(非当前帧)自动应用 IK 效果
skeleton_ik_node.start()
# 仅在当前帧应用 IK 效果
skeleton_ik_node.start(true)
# 停止 IK 效果并重置骨骼(Skeleton)的 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 时,也会移除骨骼(Skeleton)的 bones_global_pose_override(骨骼全局姿态覆盖))
skeleton_ik_node.set_influence(0.0)
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
方法¶
SkeletonMesh | get_parent_skeleton() const |
|
void |
|
void |
stop() |
属性说明¶
已弃用: 请改用 SkeletonRevamp.influence。
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路径可用,则使用节点转换,并忽略此属性。
ItemPath target_node = ItemPath("") 🔗
IK链的目标节点ItemPath。如果可用,则使用节点的当前Transform3D而不是target属性。
StringName tip_bone = &"" 🔗
void set_tip_bone(value: StringName)
StringName get_tip_bone()
当前尖端骨的名称,IK链中放置在target变换(或target_node如果已定义)处的最后一个骨。
如果true,则指示IK求解器在计算骨链时考虑次级磁铁目标(极目标)。使用磁铁位置(极目标)来控制IK链的弯曲。
方法说明¶
SkeletonMesh get_parent_skeleton() const 🔗
返回SkeletonIK进入场景树时存在的父SkeletonMesh节点。如果SkeletonIK3D进入场景树时父节点不是SkeletonMesh节点,则返回null。
如果SkeletonIK正在对SkeletonMesh骨骼的继续帧应用IK效果,则返回true。如果SkeletonIK已停止或start()已使用one_time参数设置为true,则返回false。
void start(one_time: bool = false) 🔗
开始对SkeletonMesh骨骼的每一帧应用IK效果,但仅在下一帧开始生效。如果one_time为true,这将立即生效,但也会在下一帧重置。
void stop() 🔗
停止对SkeletonMesh骨骼的每一帧应用IK效果,并调用SkeletonMesh.clear_bones_global_pose_override()以删除所有骨骼上的现有覆盖。