逆运动学 (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。您甚至可以在 Play 测试期间添加和更改 IKControl,以快速检查各种属性如何影响角色的移动。
要使用 Attachment 作为目标快速测试您的 IKControl:
在 Studio 的夹层中, 启动回放测试。
单击您角色模型的 HumanoidRootPart 旁边的 ⊕ 图标,然后添加一个 Attachment。

选择 Attachment,并使用 移动 工具将对象定位在角色面前的视口中。

在 资源管理器 窗口中,选择您角色的 Humanoid 旁边的 ⊕ 图标,添加一个 IKControl。

选择 IKControl,并在 属性 窗口中设置以下属性值:
- 类型: 从下拉菜单中选择 Transform。
- 目标: 在 资源管理器 中选择新创建的 Attachment 对象。

IKControl 属性 
资源管理器 - 角色模型 您角色的左臂现在应伸向目标 Attachment。您可以尝试移动 Attachment 或编辑 IKControl 属性以获得不同的结果。
添加约束
您可以使用 Constraints 来限制关节在到达目标时的移动方式。约束可以确保诸如肘部和膝盖的关节自然弯曲,或使机械关节以特定方向旋转。


要使用 IKControl 向角色添加约束,您的 IKControl 和约束必须满足以下条件:
- 约束和 IKControl 共享同一父级 Model。
以下说明描述了向角色的肘部添加 HingeConstraint 以限制其旋转,并向手腕添加 BallSocketConstraint 以限制旋转角度的过程。
肘部
Roblox R15 角色的关节中已经包含可以用来应用肘部约束的附件。对于肘部,左上臂和左下臂都包含一个 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,让手指指向角色前方,手腕应更加逼真地旋转和弯曲。