反向運動學(IK)是一種常見的計算機動畫技術,用於有效地使角色與其環境現實地互動。為角色創造逼真的運動過程通常需要多次迭代和對各關節的微調。使用IK,您可以通過調整單個物體來姿勢並動畫多個角色部件。
這種動畫技術可以提供以下示例的解決方案:
IKControl
您可以使用 IKControl 在動畫編輯器之外為角色骨架程序性地添加IK。Studio允許您以編程方式將IK應用於所有角色,例如R15、Rthro和自定義導入的蒙皮角色,以在您的遊戲中創造現實的運動和互動。
添加 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
您可以以編程方式或直接通過資源管理器添加和編輯 IKControl。您甚至可以在測試遊玩期間添加和修改 IKControl,以快速檢查各種屬性如何影響角色的動作。
要快速測試您的 IKControl,可以使用 Attachment 作為目標:
在Studio的中層,啟動測試遊玩。
點擊角色模型的 HumanoidRootPart 旁邊的 ⊕ 圖標,並添加一個 Attachment。

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

在資源管理器視窗中,選擇角色的 Humanoid 旁邊的 ⊕ 圖標並添加一個 IKControl。

選擇 IKControl 並在 屬性 視窗中設置以下屬性值:
- Type:從下拉菜單中選擇 Transform。
- Target:在 資源管理器 中選擇新創建的 Attachment 物體。

IKControl 屬性 
資源管理器 - 角色模型 角色的左臂現在應該朝向目標 Attachment。您可以嘗試移動 Attachment 或編輯 IKControl 的屬性以實現不同的效果。
添加約束
您可以使用 Constraints 來限制關節在到達目標時的移動方式。約束可以確保像肘部和膝蓋這樣的關節自然彎曲,或使機械關節在特定方向上旋轉。


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

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

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

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

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

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