反向運動學

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

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

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

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

IKControl

您可以使用 IKControl動畫編輯器 之外程序性地為角色模型添加 IK。Studio 允許您以編程方式將 IK 應用於所有角色,以在您的遊戲中創建現實的運動和互動。

在添加 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

您可以通過編程或直接通過 Explorer 添加和編輯 IKControl。您甚至可以在 Play 測試期間添加和更改 IKControl,以快速檢查各種屬性如何影響角色的運動。

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

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

  2. Explorer 窗口中,導航到 Workspace → 您的用戶的 Model。此 Model 實例的名稱與您當前的 Roblox 帳戶相同。

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

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

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

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

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

    您角色的左臂現在應該能夠伸向目標 Attachment。您可以嘗試移動 Attachment 或編輯 IKControl 屬性以獲得不同的結果。

添加約束

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

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

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

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

肘部

具有 標準模型 的角色已經在其關節中包含附件,您可以使用這些附件來應用肘部約束。對於肘部,LeftUpperArm 和 LeftLowerArm 都包含 LeftElbowRigAttachment。除了添加約束外,您還需要為每個部件的 LeftElbowRigAttachment 添加額外的子附件,以指定肘部可以圍繞哪個軸旋轉。

要添加 HingeConstraint 和子附件:

  1. Explorer 窗口中,找到您模型的 LeftLowerArm,然後單擊 ⊕ 按鈕

  2. 添加一個名為 LeftElbowConstraintHingeConstraint

  3. Explorer 窗口中,導航到 LeftUpperArm.LeftElbowRigAttachment 並添加一個附件:

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

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

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

  4. Explorer 窗口中,導航到您模型的 LeftLowerArm.LeftElbowRigAttachment,添加一個附件:

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

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

手腕

即使有肘部約束,IKControl 仍然可能在手腕上產生不現實的姿勢。

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

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

要為手腕添加 BallSocketConstraint

  1. Explorer 窗口中,找到您模型的 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. Explorer 窗口中,選擇 LeftWristConstraint
  5. 屬性 窗口中,設置以下內容:
    1. 啟用 LimitsEnabled
    2. UpperAngle 設置為 80。這控制約束的軸可以旋轉的程度,80 度大約是手腕應該能夠彎曲的程度。
  6. 根據您的角色,您可能希望調整圓錐指向的方向。您可以使用 旋轉工具 來旋轉約束的 Attachment0

選擇 LeftWristConstraint 時,會出現一個綠色圓錐,顯示手腕的運動範圍。

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

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