反向運動學

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

反向運動學(IK)是一種常見的計算機動畫技術,用於有效地使角色與其環境現實地互動。為角色創造逼真的運動過程通常需要多次迭代和對各關節的微調。使用IK,您可以通過調整單個物體來姿勢並動畫多個角色部件。

這種動畫技術可以提供以下示例的解決方案:

抓住並擺放角色的手,同時自動調整相關的肢體,如手腕、肘部和肩膀。
使角色的雙腳在不同的表面和坡度上現實地互動。
抓住並移動單個目標物體,快速創造與角色和道具的現實互動。

IKControl

您可以使用 IKControl動畫編輯器之外為角色骨架程序性地添加IK。Studio允許您以編程方式將IK應用於所有角色,例如R15、Rthro和自定義導入的蒙皮角色,以在您的遊戲中創造現實的運動和互動。

添加 IKControl 時,必須正確設置所需屬性以避免意外和不自然的動畫結果。與所有動畫一樣,請測試您的IKControls以確保您達到預期的行為。

所需屬性

當您將 IKControl 添加到角色的 HumanoidAnimationController 時,必須設置以下所需屬性以啟用IK:

屬性描述
Type指定IK控制的行為類型。請參閱Enum.IKControlType以獲取行為選項的列表。常見的行為類型是PositionTransform
EndEffector您角色骨架中的 BasePartBone,該部件朝向 Target 進行跟踪。例如,您可以將LeftHand骨骼設置為 EndEffector 以到達設置為 Target 的門把手物體。
TargetEndEffector 到達或指向的物體。Target 可以是任何具有世界位置的物體。
ChainRoot定義IKControl影響的BasePartsBones 的鏈條。所有在ChainRootEndEffector之間連接的部件,都會根據定義的行為類型受到IKControl的影響。

例如,如果您的角色的LeftHand設置為 Target,您可以通過將 ChainRoot 設置為LeftUpperArm來對整個左臂應用IK。要僅對肘部以下的部件應用IK,請將 ChainRoot 設置為LeftLowerArm

測試IKControls

您可以以編程方式或直接通過資源管理器添加和編輯 IKControl。您甚至可以在測試遊玩期間添加和修改 IKControl,以快速檢查各種屬性如何影響角色的動作。

要快速測試您的 IKControl,可以使用 Attachment 作為目標:

  1. 在Studio的中層,啟動測試遊玩

  2. 資源管理器中,導航到Workspace → 您的用戶 Model。該 Model 實例名為您當前的Roblox賬戶。

  3. 點擊角色模型的 HumanoidRootPart 旁邊的 圖標,並添加一個 Attachment

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

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

  6. 選擇 IKControl 並在 屬性 視窗中設置以下屬性值:

    1. Type:從下拉菜單中選擇 Transform
    2. EndEffector:在 資源管理器 中選擇您模型的 LeftHand MeshPart
    3. Target:在 資源管理器 中選擇新創建的 Attachment 物體。
    4. ChainRoot:在 資源管理器 中選擇您模型的 LeftUpperArm MeshPart
    IKControl 屬性
    資源管理器 - 角色模型

    角色的左臂現在應該朝向目標 Attachment。您可以嘗試移動 Attachment 或編輯 IKControl 的屬性以實現不同的效果。

添加約束

您可以使用 Constraints 來限制關節在到達目標時的移動方式。約束可以確保像肘部和膝蓋這樣的關節自然彎曲,或使機械關節在特定方向上旋轉。

肘部不自然彎曲
肘部正確彎曲

要使用 IKControl 對角色添加約束,您的 IKControl 和約束必須滿足以下條件:

以下說明了添加 HingeConstraint 以限制角色肘部旋轉和添加 BallSocketConstraint 以限制手腕旋轉角度的過程。

肘部

Roblox R15角色已經在其關節中包含可以用於應用肘部約束的附件。對於肘部,LeftUpperArm和LeftLowerArm都包含 LeftElbowRigAttachment。除了添加約束外,您還需要為每個部件的 LeftElbowRigAttachment 添加額外的子附件,以指定肘部可以繞著哪個軸旋轉。

要添加 HingeConstraint 和子附件:

  1. 資源管理器 中找到您模型的 LeftLowerArm,並點擊 ⊕ 按鈕

  2. 添加一個名為 LeftElbowConstraintHingeConstraint

  3. 資源管理器 中導航到 LeftUpperArm.LeftElbowRigAttachment,並添加一個附件:

    1. 點擊 ⊕ 按鈕 添加一個名為 LeftElbowConstraintAttachment0Attachment

    2. 在視口中選擇該附件,並使用 旋轉工具 旋轉附件,以便黃色的 PrimaryAxis 成為肘部預期旋轉的軸。

    3. LeftElbowConstraint.Attachment0 屬性設置為這個新附件。

  4. 資源管理器 中,導航到您模型的 LeftLowerArm.LeftElbowRigAttachment,添加一個附件:

    1. 點擊 ⊕ 按鈕,添加名為 LeftElbowConstraintAttachment1Attachment
    2. LeftUpperArm.LeftElbowConstraint.Attachment1 屬性設置為這個新附件。
    3. 複製 LeftElbowConstraintAttachment0.CFrameOrientation 屬性,並將其粘貼為 LeftElbowConstraint.Attachment1.CFrameOrientation 的值。

測試您的IKControl以驗證肘部僅在其鉸鏈軸周圍旋轉:

手腕

即使有肘部約束,IKControl仍然可能會產生手腕的不自然姿勢。

手腕在某些方向上不自然地彎曲

您可以通過添加 BallSocketConstraint 來改善這一點,以限制手腕的旋轉。雖然這與為肘部添加 HingeConstraint 的過程相似,但您可以使用此約束上的 LimitsEnabled 屬性進一步控制手腕的運動範圍。

要為手腕添加 BallSocketConstraint

  1. 資源管理器 中找到您模型的 LeftHand,並點擊 ⊕ 按鈕
    1. 添加名為 LeftWristConstraintBallSocketConstraint
  2. 找到您模型的 LeftLowerArm.LeftWristRigAttachment,並添加一個附件:
    1. 點擊 ⊕ 按鈕,添加名為 LeftWristConstraintAttachment0Attachment
    2. 在視口中選擇該附件,並使用 旋轉工具 旋轉附件,以便黃色的 PrimaryAxis 指向模型的手指尖。
    3. LeftWristConstraint.Attachment0 屬性設置為新的 LeftWristConstraintAttachment0
  3. 找到您模型的 LeftHand.LeftWristRigAttachment,並添加一個附件:
    1. 點擊 ⊕ 按鈕,添加名為 LeftWristConstraintAttachment1Attachment
    2. 複製 LeftWristConstraintAttachment0.CFrameOrientation 屬性,並將其黏貼為 LeftWristConstraintAttachment1.CFrameOrientation 屬性。
    3. LeftWristConstraint.Attachment1 屬性設置為這個新的 LeftWristConstraintAttachment1
  4. 資源管理器 中選擇 LeftWristConstraint
  5. 屬性 視窗中,設置以下內容:
    1. 啟用 LimitsEnabled
    2. UpperAngle 設置為 80。這控制了約束軸的旋轉程度,80度大約是手腕可以彎曲的角度。
  6. 根據您的角色,您可能需要調整圓錐指向的方向。您可以使用 旋轉工具 來旋轉約束的 Attachment0

選擇 LeftWristConstraint 時,會出現一個綠色圓錐來可視化手腕的運動範圍。

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

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。