Trigonometric IK是最基本的IK解算器,它基于余弦定律并解決了3段骨骼層次結(jié)構(gòu)靠闭。 (IKSolverLimb擴(kuò)展IKSolverTrigonometric只是為了添加一些額外的參數(shù)帐我,比如彎曲修改器)
使用步驟:
- 將TrigonometricIK組件添加到第一個(gè)骨骼。
- 在TrigonometricIK組件中指定bone1愧膀,bone2和bone3
- 運(yùn)行游戲
使用腳本控制:
public TrigonometricIK trig;
void LateUpdate () {
// Changing the target position, rotation and weights
trig.solver.IKPosition = something;
trig.solver.IKRotation = something;
trig.solver.IKPositionWeight = something;
trig.solver.IKRotationWeight = something;
trig.solver.SetBendGoalPosition(Vector goalPosition); // Sets the bend goal to a point in world space
}
在運(yùn)行時(shí)添加TrigonometricIK:
- 通過腳本添加TrigonometricIK組件
-
調(diào)用TrigonometricIK.solver.SetChain()
TrigonometricIK
組件參數(shù):
- timeStep - 如果為零拦键,將更新每個(gè)LateUpdate()中的求解器,用于骨骼帶動(dòng)畫時(shí)的情況檩淋。 如果大于零芬为,將按頻率更新,以便求解器將在所有對象上同時(shí)到達(dá)其目標(biāo)蟀悦。
- fixTransforms - 如果為true媚朦,則將解算器使用的所有Transforms修復(fù)為每個(gè)Update中的初始狀態(tài)。 這可以防止沒有動(dòng)畫骨骼和animator的剔除的問題熬芜,并且性能成本很低莲镣。
求解參數(shù):
- bone1 - 第一根骨頭(上臂或大腿)
- bone2 - 第二骨(前臂或小腿)
- bone3 - 第三骨(手或腳)
- target - 目標(biāo)transform。如果已分配涎拉,則解算器的IKPosition和IKRotation將自動(dòng)設(shè)置為目標(biāo)的位置
- positionWeight - 求解目標(biāo)位置的權(quán)重(IKPosition)
- rotationWeight - 求解目標(biāo)旋轉(zhuǎn)的權(quán)重(IKRotation)
- bendNormal - 由骨骼位置定義的平面的法線瑞侮。當(dāng)肢體彎曲時(shí),第二根骨骼將始終位于該平面上的某個(gè)位置