SkeletonModification2DFABRIK
实验性: This class may be changed or removed in future versions.
继承: SkeletonModification2D < Resource < RefCounted < Object
使用 FABRIK 操纵一系列 Bone2D 到达某个目标的修改器。
描述
这种 SkeletonModification2D 使用的是名为前后延伸反向运动学(Forward And Backward Reaching Inverse Kinematics)的算法,即 FABRIK,能够对一条骨骼链进行旋转,从而抵达目标。
FABRIK 需要先拿到一系列骨骼的位置和长度,这组骨骼通常称作“骨骼链”。它首先会做一次向前处理,将最终的骨骼放置在目标的位置。然后让所有其他骨骼朝尖端骨骼移动,恢复原有的骨骼长度。然后再做一次向后处理,将 FABRIK 链中的根/第一根骨骼放回原点。然后移动所有其他骨骼,恢复原有的骨骼长度。这样就尽可能地让骨骼链抵达了目标,并且所有骨骼之间的长度仍然为正确的长度。
由于 FABRIK 的工作原理,它通常比 SkeletonModification2DCCDIK 得到的结果更加自然。FABRIK 还支持角度约束,在求解过程中会完全遵守这些约束。
注意:FABRIK 修改器具有关节属性 fabrik_joints
,里面是存放 FABRIK 链中各个关节数据的数据对象。关节和 Bone2D 是两码事!FABRIK 关节存放的是 FABRIK 所使用的骨骼链中每根 Bone2D 所需的数据。
可以传入磁铁向量来帮助控制 FABRIK 关节的移动,会在求解前让骨骼朝某个方向做略微的移动,对最终结果进行微调。
属性
| ||
|
方法
get_fabrik_joint_bone2d_node(joint_idx: int) const | |
get_fabrik_joint_bone_index(joint_idx: int) const | |
get_fabrik_joint_magnet_position(joint_idx: int) const | |
get_fabrik_joint_use_target_rotation(joint_idx: int) const | |
void | set_fabrik_joint_bone2d_node(joint_idx: int, bone2d_nodepath: NodePath) |
void | set_fabrik_joint_bone_index(joint_idx: int, bone_idx: int) |
void | set_fabrik_joint_magnet_position(joint_idx: int, magnet_position: Vector2) |
void | set_fabrik_joint_use_target_rotation(joint_idx: int, use_target_rotation: bool) |
属性说明
int fabrik_data_chain_length = 0
🔗
FABRIK 修改中 FABRIK 关节的数量。
NodePath target_nodepath = NodePath("")
🔗
FABRIK 修改器的目标节点的 NodePath。FABRIK 链会尝试将骨骼链转向这个节点。
方法说明
NodePath get_fabrik_joint_bone2d_node(joint_idx: int) const 🔗
返回分配给位于 joint_idx
的 FABRIK 关节的 Bone2D 节点。
int get_fabrik_joint_bone_index(joint_idx: int) const 🔗
返回分配给位于 joint_idx
的 FABRIK 关节的 Bone2D 节点的索引。
Vector2 get_fabrik_joint_magnet_position(joint_idx: int) const 🔗
返回位于 joint_idx
的关节的磁吸位置向量。
bool get_fabrik_joint_use_target_rotation(joint_idx: int) const 🔗
返回关节是否正在使用目标的旋转,而不是允许 FABRIK 旋转关节。此选项仅适用于链中的末端/最终关节。
void set_fabrik_joint_bone2d_node(joint_idx: int, bone2d_nodepath: NodePath) 🔗
设置分配给位于 joint_idx
的 FABRIK 关节的 Bone2D 节点。
void set_fabrik_joint_bone_index(joint_idx: int, bone_idx: int) 🔗
设置位于 joint_idx
的 FABRIK 关节的骨骼索引 bone_idx
。可能时,这也会根据链接骨架所提供的数据来更新 FABRIK 关节的 bone2d_node
。
void set_fabrik_joint_magnet_position(joint_idx: int, magnet_position: Vector2) 🔗
设置位于 joint_idx
的关节的磁吸位置向量。
void set_fabrik_joint_use_target_rotation(joint_idx: int, use_target_rotation: bool) 🔗
设置位于 joint_idx
的关节是否正在使用目标节点的旋转,而不是让 FABRIK 旋转关节。
注意:这个选项仅适用于链中的末端/最终关节。对于所有其他节点,这个选项将被忽略。