Unity中的逆向動力學

前向動力學是通過父關節點的移動來計算子關節點的位置,這樣一步步確定骨骼鏈上所有關節的位置。而逆向動力學(Inverse Kinematics,後文簡稱IK):通過子關節的位置,反求推導出所在骨骼鏈上n級父關節點的位置。

逆向動力學的優缺點:

  • 優點:工作效率高,不需要手動控制的關節數目。
  • 缺點:解方程需要耗費較多的計算機資源。

比如在射擊遊戲中,我們要設置一個角色左手右手的持槍姿勢,同時目光看向槍口瞄準處。直接設置左手、右手以及視線最終落在槍身上的位置。通過IK可以反推算出左右手臂以及頭部的骨骼鏈。

在Unity引擎中,可以以如下步驟,實現上述任務:

  1. 有一個具有有效Avatar的角色模型

  2. 爲該角色創建一個 至少含有一個animation的 Animator Controller 。然後在該動畫層中勾選IK Pass選項。

  3. 寫一個腳本,可以簡單命名爲IKController。其中只是簡單設置一些IK目標。關鍵語句如下:

    animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1);
    animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1); animator.SetIKPosition(AvatarIKGoal.RightHand,rightHandObj.position);
    animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);

  4. 將腳本綁定在角色對象上,再在場景中設置一些空對象。將空對象綁定在IKController上。空對象的transfer組件中的position和rotation分量會以IK形式,影響模型。具體看步驟3中的腳本。

  5. 進入play模式,就可以看到IK的作用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章