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。