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.

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