SkeletonModification2DCCDIK
实验性: This class may be changed or removed in future versions.
继承: SkeletonModification2D < Resource < RefCounted < Object
使用 CCDIK 操纵一系列骨骼到达某个 2D 目标的修改器。
描述
这种 SkeletonModification2D 使用的是名为循环坐标下降逆向运动学(Cyclic Coordinate Descent Inverse Kinematics)的算法,即 CCDIK,能够对 Skeleton2D 中的一条骨骼链进行操作,从而抵达指定的目标。
CCDIK 的工作原理是让一组骨骼围绕单一轴旋转,这组骨骼通常称作“骨骼链”。每根骨骼的尖端都会转向目标(默认),这样整条骨骼链就能够正确旋转,从而抵达目标。因为这些骨骼都只围绕单一轴进行旋转,CCDIK 看起来能够比其他 IK 解算器更加机械。
注意:CCDIK 修改器具有关节属性 ccdik_joints
,里面是存放 CCDIK 链中各个关节数据的数据对象。关节和骨骼是两码事!CCDIK 关节存放的是 CCDIK 所使用的骨骼链中每根骨骼所需的数据。
CCDIK 还完全支持角度约束,能够对求解过程进行更多控制。
属性
| ||
| ||
|
方法
get_ccdik_joint_bone2d_node(joint_idx: int) const | |
get_ccdik_joint_bone_index(joint_idx: int) const | |
get_ccdik_joint_constraint_angle_invert(joint_idx: int) const | |
get_ccdik_joint_constraint_angle_max(joint_idx: int) const | |
get_ccdik_joint_constraint_angle_min(joint_idx: int) const | |
get_ccdik_joint_enable_constraint(joint_idx: int) const | |
get_ccdik_joint_rotate_from_joint(joint_idx: int) const | |
void | set_ccdik_joint_bone2d_node(joint_idx: int, bone2d_nodepath: NodePath) |
void | set_ccdik_joint_bone_index(joint_idx: int, bone_idx: int) |
void | set_ccdik_joint_constraint_angle_invert(joint_idx: int, invert: bool) |
void | set_ccdik_joint_constraint_angle_max(joint_idx: int, angle_max: float) |
void | set_ccdik_joint_constraint_angle_min(joint_idx: int, angle_min: float) |
void | set_ccdik_joint_enable_constraint(joint_idx: int, enable_constraint: bool) |
void | set_ccdik_joint_rotate_from_joint(joint_idx: int, rotate_from_joint: bool) |
属性说明
int ccdik_data_chain_length = 0
🔗
CCDIK 修改中 CCDIK 关节的数量。
NodePath target_nodepath = NodePath("")
🔗
作为 CCDIK 修改目标的节点的 NodePath。该节点是 CCDIK 链会尝试将该骨骼链旋转到的节点。
NodePath tip_nodepath = NodePath("")
🔗
该 CCDIK 链的结束位置。通常,这应该是一个 Bone2D 节点的一个子节点,被附加到 CCDIK 链中的最终 Bone2D 上。
方法说明
NodePath get_ccdik_joint_bone2d_node(joint_idx: int) const 🔗
返回分配给位于 joint_idx
的 CCDIK 关节的 Bone2D 节点。
int get_ccdik_joint_bone_index(joint_idx: int) const 🔗
返回分配给位于 joint_idx
的 CCDIK 关节的 Bone2D 节点的索引。
bool get_ccdik_joint_constraint_angle_invert(joint_idx: int) const 🔗
返回索引为 joint_idx
的 CCDIK 关节是否使用反向关节约束。详见 set_ccdik_joint_constraint_angle_invert。
float get_ccdik_joint_constraint_angle_max(joint_idx: int) const 🔗
返回索引为 joint_idx
的关节的最大角约束。
float get_ccdik_joint_constraint_angle_min(joint_idx: int) const 🔗
返回索引为 joint_idx
的关节的最小角约束。
bool get_ccdik_joint_enable_constraint(joint_idx: int) const 🔗
返回索引为 joint_idx
的 CCDIK 关节是否启用角度约束。
bool get_ccdik_joint_rotate_from_joint(joint_idx: int) const 🔗
返回位于 joint_idx
的关节是从该关节旋转,true
,还是从尖端旋转,false
。默认是从尖端旋转。
void set_ccdik_joint_bone2d_node(joint_idx: int, bone2d_nodepath: NodePath) 🔗
设置分配给位于 joint_idx
的 CCDIK 关节的 Bone2D 节点。
void set_ccdik_joint_bone_index(joint_idx: int, bone_idx: int) 🔗
设置位于 joint_idx
的 CCDIK 关节的骨骼索引 joint_idx
。可能时,还会根据所链接的骨架提供的信息来更新 CCDIK 关节的 bone2d_node
。
void set_ccdik_joint_constraint_angle_invert(joint_idx: int, invert: bool) 🔗
设置索引为 joint_idx
的 CCDIK 关节是否使用反向关节约束。
反向关节约束只会将该 CCDIK 关节的角度约束在输入的最大最小角度范围之外。因此,它被称为反向关节约束,因为它将关节约束在输入值的外部。
void set_ccdik_joint_constraint_angle_max(joint_idx: int, angle_max: float) 🔗
设置索引为 joint_idx
的关节的最大角约束。
void set_ccdik_joint_constraint_angle_min(joint_idx: int, angle_min: float) 🔗
设置索引为 joint_idx
的关节的最小角约束。
void set_ccdik_joint_enable_constraint(joint_idx: int, enable_constraint: bool) 🔗
决定是否启用 joint_idx
处 CCDIK 关节上的角度约束。为 true
时将启用约束,在求解时纳入考虑范围。
void set_ccdik_joint_rotate_from_joint(joint_idx: int, rotate_from_joint: bool) 🔗
设置位于 joint_idx
的关节是设为从关节旋转,true
,还是从尖端旋转,false
。