Up to date

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

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

属性

int

ccdik_data_chain_length

0

NodePath

target_nodepath

NodePath("")

NodePath

tip_nodepath

NodePath("")

方法

NodePath

get_ccdik_joint_bone2d_node ( int joint_idx ) const

int

get_ccdik_joint_bone_index ( int joint_idx ) const

bool

get_ccdik_joint_constraint_angle_invert ( int joint_idx ) const

float

get_ccdik_joint_constraint_angle_max ( int joint_idx ) const

float

get_ccdik_joint_constraint_angle_min ( int joint_idx ) const

bool

get_ccdik_joint_enable_constraint ( int joint_idx ) const

bool

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

  • void set_ccdik_data_chain_length ( int value )

  • 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 ( 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