Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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 关节的移动,会在求解前让骨骼朝某个方向做略微的移动,对最终结果进行微调。

属性

int

fabrik_data_chain_length

0

NodePath

target_nodepath

NodePath("")

方法

NodePath

get_fabrik_joint_bone2d_node ( int joint_idx ) const

int

get_fabrik_joint_bone_index ( int joint_idx ) const

Vector2

get_fabrik_joint_magnet_position ( int joint_idx ) const

bool

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

  • void set_fabrik_data_chain_length ( int value )

  • int get_fabrik_data_chain_length ( )

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 旋转关节。

注意:这个选项仅适用于链中的末端/最终关节。对于所有其他节点,这个选项将被忽略。