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 还完全支持角度约束,能够对求解过程进行更多控制。

属性

int

ccdik_data_chain_length

0

NodePath

target_nodepath

NodePath(“”)

NodePath

tip_nodepath

NodePath(“”)

方法

NodePath

get_ccdik_joint_bone2d_node(joint_idx: int) const

int

get_ccdik_joint_bone_index(joint_idx: int) const

bool

get_ccdik_joint_constraint_angle_invert(joint_idx: int) const

float

get_ccdik_joint_constraint_angle_max(joint_idx: int) const

float

get_ccdik_joint_constraint_angle_min(joint_idx: int) const

bool

get_ccdik_joint_enable_constraint(joint_idx: int) const

bool

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 🔗

  • void set_ccdik_data_chain_length(value: int)

  • int get_ccdik_data_chain_length()

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