Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
SkeletonModification2DCCDIK¶
继承: 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 ( int joint_idx ) const |
|
get_ccdik_joint_bone_index ( int joint_idx ) const |
|
get_ccdik_joint_constraint_angle_invert ( int joint_idx ) const |
|
get_ccdik_joint_constraint_angle_max ( int joint_idx ) const |
|
get_ccdik_joint_constraint_angle_min ( int joint_idx ) const |
|
get_ccdik_joint_enable_constraint ( int joint_idx ) const |
|
get_ccdik_joint_rotate_from_joint ( int joint_idx ) const |
|
void |
set_ccdik_joint_bone2d_node ( int joint_idx, NodePath bone2d_nodepath ) |
void |
set_ccdik_joint_bone_index ( int joint_idx, int bone_idx ) |
void |
set_ccdik_joint_constraint_angle_invert ( int joint_idx, bool invert ) |
void |
set_ccdik_joint_constraint_angle_max ( int joint_idx, float angle_max ) |
void |
set_ccdik_joint_constraint_angle_min ( int joint_idx, float angle_min ) |
void |
set_ccdik_joint_enable_constraint ( int joint_idx, bool enable_constraint ) |
void |
set_ccdik_joint_rotate_from_joint ( int joint_idx, bool rotate_from_joint ) |
属性说明¶
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 ( int joint_idx ) const
返回分配给位于 joint_idx
的 CCDIK 关节的 Bone2D 节点。
int get_ccdik_joint_bone_index ( int joint_idx ) const
返回分配给位于 joint_idx
的 CCDIK 关节的 Bone2D 节点的索引。
bool get_ccdik_joint_constraint_angle_invert ( int joint_idx ) const
返回索引为 joint_idx
的 CCDIK 关节是否使用反向关节约束。详见 set_ccdik_joint_constraint_angle_invert。
float get_ccdik_joint_constraint_angle_max ( int joint_idx ) const
返回索引为 joint_idx
的关节的最大角约束。
float get_ccdik_joint_constraint_angle_min ( int joint_idx ) const
返回索引为 joint_idx
的关节的最小角约束。
bool get_ccdik_joint_enable_constraint ( int joint_idx ) const
返回索引为 joint_idx
的 CCDIK 关节是否启用角度约束。
bool get_ccdik_joint_rotate_from_joint ( int joint_idx ) const
返回位于 joint_idx
的关节是从该关节旋转,true
,还是从尖端旋转,false
。默认是从尖端旋转。
void set_ccdik_joint_bone2d_node ( int joint_idx, NodePath bone2d_nodepath )
设置分配给位于 joint_idx
的 CCDIK 关节的 Bone2D 节点。
void set_ccdik_joint_bone_index ( int joint_idx, int bone_idx )
设置位于 joint_idx
的 CCDIK 关节的骨骼索引 joint_idx
。可能时,还会根据所链接的骨架提供的信息来更新 CCDIK 关节的 bone2d_node
。
void set_ccdik_joint_constraint_angle_invert ( int joint_idx, bool invert )
设置索引为 joint_idx
的 CCDIK 关节是否使用反向关节约束。
反向关节约束只会将该 CCDIK 关节的角度约束在输入的最大最小角度范围之外。因此,它被称为反向关节约束,因为它将关节约束在输入值的外部。
void set_ccdik_joint_constraint_angle_max ( int joint_idx, float angle_max )
设置索引为 joint_idx
的关节的最大角约束。
void set_ccdik_joint_constraint_angle_min ( int joint_idx, float angle_min )
设置索引为 joint_idx
的关节的最小角约束。
void set_ccdik_joint_enable_constraint ( int joint_idx, bool enable_constraint )
决定是否启用 joint_idx
处 CCDIK 关节上的角度约束。为 true
时将启用约束,在求解时纳入考虑范围。
void set_ccdik_joint_rotate_from_joint ( int joint_idx, bool rotate_from_joint )
设置位于 joint_idx
的关节是设为从关节旋转,true
,还是从尖端旋转,false
。