SkeletonModification2DFABRIK
继承: 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 ( int joint_idx ) const | |
get_fabrik_joint_bone_index ( int joint_idx ) const | |
get_fabrik_joint_magnet_position ( int joint_idx ) const | |
get_fabrik_joint_use_target_rotation ( int joint_idx ) const | |
void | set_fabrik_joint_bone2d_node ( int joint_idx, NodePath bone2d_nodepath ) |
void | set_fabrik_joint_bone_index ( int joint_idx, int bone_idx ) |
void | set_fabrik_joint_magnet_position ( int joint_idx, Vector2 magnet_position ) |
void | set_fabrik_joint_use_target_rotation ( int joint_idx, bool use_target_rotation ) |
属性说明
int fabrik_data_chain_length = 0
FABRIK 修改中 FABRIK 关节的数量。
NodePath target_nodepath = NodePath("")
FABRIK 修改器的目标节点的 NodePath。FABRIK 链会尝试将骨骼链转向这个节点。
方法说明
NodePath get_fabrik_joint_bone2d_node ( int joint_idx ) const
返回分配给位于 joint_idx
的 FABRIK 关节的 Bone2D 节点。
int get_fabrik_joint_bone_index ( int joint_idx ) const
返回分配给位于 joint_idx
的 FABRIK 关节的 Bone2D 节点的索引。
Vector2 get_fabrik_joint_magnet_position ( int joint_idx ) const
返回位于 joint_idx
的关节的磁吸位置向量。
bool get_fabrik_joint_use_target_rotation ( int joint_idx ) const
返回关节是否正在使用目标的旋转,而不是允许 FABRIK 旋转关节。此选项仅适用于链中的末端/最终关节。
void set_fabrik_joint_bone2d_node ( int joint_idx, NodePath bone2d_nodepath )
设置分配给位于 joint_idx
的 FABRIK 关节的 Bone2D 节点。
void set_fabrik_joint_bone_index ( int joint_idx, int bone_idx )
设置位于 joint_idx
的 FABRIK 关节的骨骼索引 bone_idx
。可能时,这也会根据链接骨架所提供的数据来更新 FABRIK 关节的 bone2d_node
。
void set_fabrik_joint_magnet_position ( int joint_idx, Vector2 magnet_position )
设置位于 joint_idx
的关节的磁吸位置向量。
void set_fabrik_joint_use_target_rotation ( int joint_idx, bool use_target_rotation )
设置位于 joint_idx
的关节是否正在使用目标节点的旋转,而不是让 FABRIK 旋转关节。
注意:这个选项仅适用于链中的末端/最终关节。对于所有其他节点,这个选项将被忽略。
© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7
.
Built with Sphinx using a theme provided by Read the Docs.