反向運動學 (IK) 是計算機動畫中的一種常見技術,用於有效地使角色移動並與其環境進行現實的互動。為角色創建現實的運動過程通常需要多次迭代和對各個關節的微調。使用 IK,您可以通過調整或擺放單個物體來擺姿勢和動畫多個角色部件。
這種動畫技術可以提供以下示例的解決方案:
IKControl
您可以使用 IKControl 在 動畫編輯器 之外程序性地為角色模型添加 IK。Studio 允許您以編程方式將 IK 應用於所有角色,以在您的遊戲中創建現實的運動和互動。
在添加 IKControl 時,正確設置 所需屬性 以避免意外和不自然的動畫結果。與所有動畫一樣,請 測試您的 IKControls 以確保您達到所需的行為。
所需屬性
在將 IKControl 添加到角色的 Humanoid 或 AnimationController 時,必須設置以下所需屬性以啟用 IK:
| 屬性 | 描述 |
|---|---|
| Type | 指定 IK 控制的行為類型。請參見 Enum.IKControlType 以獲取行為選項的列表。常見的行為類型是 Position 或 Transform。 |
| EndEffector | 您角色模型中的 BasePart 或 Bone,它跟踪指向 Target。例如,您可以將 LeftHand 骨骼設置為 EndEffector,以到達設置為 Target 的門把手物體。 |
| Target | EndEffector 到達或指向的物體。Target 可以是任何具有世界位置的物體。 |
| ChainRoot | 定義 IKControl 影響的 BaseParts 或 Bones 的鏈。所有連接的部件在 ChainRoot 和 EndEffector 之間都會受到 IKControl 的影響,使用定義的行為類型。 例如,如果您的角色的 LeftHand 設置為 Target,您可以通過將 ChainRoot 設置為 LeftUpperArm 來對整個左臂應用 IK。要僅對肘部以下的部件應用 IK,請將 ChainRoot 設置為 LeftLowerArm。 |
測試 IKControls
您可以通過編程或直接通過 Explorer 添加和編輯 IKControl。您甚至可以在 Play 測試期間添加和更改 IKControl,以快速檢查各種屬性如何影響角色的運動。
要快速測試您的 IKControl,使用 Attachment 作為目標:
從 Studio 的中層, 啟動遊玩測試。
點擊角色模型的 HumanoidRootPart 旁邊的 ⊕ 圖標,並添加一個 Attachment。

選擇 Attachment,並使用 移動 工具將物體放置在角色前方的視口中。

在 Explorer 窗口中,選擇角色的 Humanoid 旁邊的 ⊕ 圖標,並添加一個 IKControl。

選擇 IKControl,並在 屬性 窗口中設置以下屬性值:
- Type: 從下拉菜單中選擇 Transform。
- Target: 在 Explorer 中選擇新創建的 Attachment 物體。

IKControl 屬性 
Explorer - 角色模型 您角色的左臂現在應該能夠伸向目標 Attachment。您可以嘗試移動 Attachment 或編輯 IKControl 屬性以獲得不同的結果。
添加約束
您可以使用 Constraints 來限制關節在到達目標時的運動方式。約束可以確保像肘部和膝蓋這樣的關節自然彎曲,或者使機械關節以特定方向旋轉。


要使用 IKControl 為角色添加約束,您的 IKControl 和約束必須滿足以下條件:
- 約束和 IKControl 共享相同的父級 Model。
以下說明了將 HingeConstraint 添加到角色的肘部以限制其旋轉,並將 BallSocketConstraint 添加到手腕以限制旋轉角度的過程。
肘部
具有 標準模型 的角色已經在其關節中包含附件,您可以使用這些附件來應用肘部約束。對於肘部,LeftUpperArm 和 LeftLowerArm 都包含 LeftElbowRigAttachment。除了添加約束外,您還需要為每個部件的 LeftElbowRigAttachment 添加額外的子附件,以指定肘部可以圍繞哪個軸旋轉。
要添加 HingeConstraint 和子附件:
在 Explorer 窗口中,找到您模型的 LeftLowerArm,然後單擊 ⊕ 按鈕。
添加一個名為 LeftElbowConstraint 的 HingeConstraint。
在 Explorer 窗口中,導航到 LeftUpperArm.LeftElbowRigAttachment 並添加一個附件:
單擊 ⊕ 按鈕,添加一個名為 LeftElbowConstraintAttachment0 的 Attachment。
在視口中,選擇該附件並使用 旋轉工具 旋轉附件,使黃色的 PrimaryAxis 成為肘部預期旋轉的軸。

將 LeftElbowConstraint.Attachment0 屬性設置為此新附件。
在 Explorer 窗口中,導航到您模型的 LeftLowerArm.LeftElbowRigAttachment,添加一個附件:
- 單擊 ⊕ 按鈕,添加一個名為 LeftElbowConstraintAttachment1 的 Attachment。
- 將 LeftUpperArm.LeftElbowConstraint.Attachment1 屬性設置為此新附件。
- 複製 LeftElbowConstraintAttachment0.CFrameOrientation 屬性並將其粘貼為 LeftElbowConstraint.Attachment1.CFrameOrientation 值。

測試您的 IKControl 以驗證肘部僅圍繞其鉸鏈軸旋轉:
手腕
即使有肘部約束,IKControl 仍然可能在手腕上產生不現實的姿勢。

您可以通過添加 BallSocketConstraint 來改善這一點,以限制手腕的旋轉。雖然這與將 HingeConstraint 添加到肘部的過程類似,但您可以在此約束上使用 LimitsEnabled 屬性進一步控制手腕的運動範圍。
要為手腕添加 BallSocketConstraint:
- 在 Explorer 窗口中,找到您模型的 LeftHand,然後單擊 ⊕ 按鈕。
- 添加一個名為 LeftWristConstraint 的 BallSocketConstraint。
- 找到您模型的 LeftLowerArm.LeftWristRigAttachment 並添加一個附件:
- 單擊 ⊕ 按鈕,添加一個名為 LeftWristConstraintAttachment0 的 Attachment。
- 在視口中,選擇該附件並使用 旋轉工具 旋轉附件,使黃色的 PrimaryAxis 指向模型的指尖。

- 將 LeftWristConstraint.Attachment0 屬性設置為新的 LeftWristConstraintAttachment0。
- 找到您模型的 LeftHand.LeftWristRigAttachment 並添加一個附件:
- 單擊 ⊕ 按鈕,添加一個名為 LeftWristConstraintAttachment1 的 Attachment。
- 複製 LeftWristConstraintAttachment0.CFrameOrientation 屬性並將其粘貼為 LeftWristConstraintAttachment1.CFrameOrientation 屬性。
- 將 LeftWristConstraint.Attachment1 屬性設置為此新 LeftWristConstraintAttachment1。
- 在 Explorer 窗口中,選擇 LeftWristConstraint。
- 在 屬性 窗口中,設置以下內容:
- 啟用 LimitsEnabled。
- 將 UpperAngle 設置為 80。這控制約束的軸可以旋轉的程度,80 度大約是手腕應該能夠彎曲的程度。
- 根據您的角色,您可能希望調整圓錐指向的方向。您可以使用 旋轉工具 來旋轉約束的 Attachment0。
選擇 LeftWristConstraint 時,會出現一個綠色圓錐,顯示手腕的運動範圍。

設置好約束後,測試 IKControl,讓手指向下在角色前方,手腕應該能夠更現實地旋轉和彎曲。