逆運動学 (IK) は、キャラクターが環境とリアルに相互作用しながら効率的に動くための一般的な技術です。キャラクターのリアルな動きを作成するプロセスは、さまざまな関節の多くの反復と微調整を必要とすることがよくあります。IKを使用すると、単一のオブジェクトをポーズまたは調整することで、複数のキャラクター部分をポーズおよびアニメーションできます。
このアニメーション技術は、以下の例に対する解決策を提供できます:
IKControl
IKControlを使用して、アニメーションエディタの外でキャラクターリグにIKを手続き的に追加できます。スタジオでは、プログラム的にすべてのキャラクターにIKを適用して、ゲーム内でリアルな動きと相互作用を作成できます。
IKControlを追加する際は、必須プロパティを正しく設定して、予期しない不自然なアニメーション結果を避けてください。すべてのアニメーションと同様に、IKControlsをテストして、望ましい動作を達成できることを確認してください。
必須プロパティ
キャラクターのHumanoidまたはAnimationControllerにIKControlを追加する際は、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を追加および変更して、さまざまなプロパティがキャラクターの動きにどのように影響するかを迅速に確認できます。
Attachmentをターゲットとして使用してIKControlを迅速にテストするには:
スタジオのメザニンから、プレイテストを開始します。
キャラクターモデルのHumanoidRootPartの横にある**⊕**アイコンをクリックして、Attachmentを追加します。

Attachmentを選択し、移動ツールを使用して、ビューポート内のキャラクターの前にオブジェクトを配置します。

エクスプローラーウィンドウで、キャラクターのHumanoidの横にある**⊕**アイコンを選択し、IKControlを追加します。

IKControlを選択し、プロパティウィンドウで以下のプロパティ値を設定します:
- Type: ドロップダウンからTransformを選択します。
- Target: エクスプローラーで新しく作成したAttachmentオブジェクトを選択します。

IKControlプロパティ 
エクスプローラー - キャラクターモデル キャラクターの左腕は、ターゲットAttachmentに向かって伸びるはずです。Attachmentを移動させたり、IKControlのプロパティを編集したりして、さまざまな結果を得ることができます。
制約を追加
Constraintsを使用して、ターゲットに到達する際の関節の動きを制限できます。制約を使用すると、肘や膝のような関節が自然に曲がることを保証したり、機械的な関節が特定の向きに回転するようにすることができます。


IKControlを使用してキャラクターに制約を追加するには、IKControlと制約が以下の条件を満たす必要があります:
- 制約とIKControlは同じ親Modelを共有する必要があります。
以下の手順では、キャラクターの肘の回転を制限するためにHingeConstraintを追加し、手首の回転角度を制限するためにBallSocketConstraintを追加するプロセスを説明します。
肘
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をテストすると、手首がよりリアルに回転し、曲がるはずです。