逆運動学 (IK) は、キャラクターが効果的に動き、現実的に環境と相互作用するためのコンピュータアニメーションで一般的な技術です。キャラクターにリアルな動きを作成するプロセスでは、さまざまな関節の多くの反復と微調整が必要です。IKを使用すると、単一のオブジェクトをポーズまたは調整することで、複数のキャラクター部分をポーズおよびアニメーションすることができます。
このアニメーション技術は、以下の例に対する解決策を提供できます:
IKControl
IKControlを使用して、Animation Editorの外部でキャラクターリグにIKを手法的に追加できます。Studioでは、プログラム的にIKをすべてのキャラクター(R15、Rthro、カスタムインポートされたスキンキャラクターなど)に適用して、ゲーム内でリアルな動きや相互作用を作成することができます。
IKControlを追加する際には、必要なプロパティを正しく設定して、予期しない不自然なアニメーション結果を回避します。すべてのアニメーションと同様に、IKControlsをテストして、目的の動作を達成できるか確認してください。
必要なプロパティ
キャラクターのHumanoidまたはAnimationControllerにIKControlを追加する際、IKを有効にするためには以下の必要なプロパティを設定する必要があります:
| プロパティ | 説明 |
|---|---|
| Type | IKコントロールの動作タイプを指定します。動作オプションのリストについてはEnum.IKControlTypeを参照してください。一般的な動作タイプにはPositionまたはTransformがあります。 |
| EndEffector | Targetを指し示すキャラクターリグ内のBasePartまたはBoneです。たとえば、LeftHandボーンをEndEffectorとして設定すると、Targetとして設定されたドアノブオブジェクトに手が届くようにできます。 |
| Target | EndEffectorが到達または指し示すオブジェクトです。Targetはワールド位置を持つ任意のオブジェクトであることができます。 |
| ChainRoot | IKControlが影響を与えるBasePartsまたはBonesの連鎖を定義します。ChainRootとEndEffectorの間のすべての接続された部分は、定義された動作タイプを使用してIKControlに影響されます。 たとえば、キャラクターのLeftHandをTargetとして設定すると、ChainRootをLeftUpperArmに設定することで左腕全体にIKを適用できます。肘の下の部分にだけIKを適用する場合は、ChainRootをLeftLowerArmに設定します。 |
IKControlsをテストする
プログラム的にまたはExplorerを介して直接IKControlを追加および編集できます。Playテスト中にIKControlを追加したり変更したりして、さまざまなプロパティがキャラクターの動きにどのように影響するかを迅速に確認できます。
Attachmentをターゲットとして使用してIKControlをすばやくテストするには:
Studioのメザニンから、プレイテストを開始します。
キャラクターモデルのHumanoidRootPartの隣にある**⊕**アイコンをクリックし、Attachmentを追加します。

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

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

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

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


キャラクターにIKControlを使用して制約を追加するには、IKControlと制約が以下の条件を満たす必要があります:
- 制約とIKControlは同じ親Modelを共有しています。
以下の手順では、キャラクターの肘の回転を制限するためにHingeConstraintを追加し、手首にBallSocketConstraintを追加して回転角度を制限する方法について説明します。
肘
Roblox R15キャラクターには、肘制約を適用するために使用できるアタッチメントがすでに関節に含まれています。肘の場合、LeftUpperArmとLeftLowerArmの両方にLeftElbowRigAttachmentが含まれています。制約を追加する際には、各部分のLeftElbowRigAttachmentに追加の子アタッチメントを追加して、肘が回転できる軸を指定する必要があります。
HingeConstraintと子アタッチメントを追加するための手順:
ExplorerでモデルのLeftLowerArmを見つけて、⊕ボタンをクリックします。
LeftElbowConstraintという名前のHingeConstraintを追加します。
Explorerで、LeftUpperArm.LeftElbowRigAttachmentをナビゲートしてアタッチメントを追加します:
⊕ボタンをクリックして、LeftElbowConstraintAttachment0という名前のAttachmentを追加します。
ビューポートでアタッチメントを選択し、Rotateツールを使用してアタッチメントを回転させ、黄色のPrimaryAxisが肘の予想される回転の軸になるようにします。

LeftElbowConstraint.Attachment0プロパティをこの新しいアタッチメントに設定します。
ExplorerでモデルのLeftLowerArm.LeftElbowRigAttachmentをナビゲートしてアタッチメントを追加します:
- ⊕ボタンをクリックして、LeftElbowConstraintAttachment1という名前のAttachmentを追加します。
- LeftUpperArm.LeftElbowConstraint.Attachment1プロパティをこの新しいアタッチメントに設定します。
- LeftElbowConstraintAttachment0.CFrameOrientationプロパティをコピーして、LeftElbowConstraint.Attachment1.CFrameOrientation値としてペーストします。

肘がヒンジ軸の周りだけを回転することを確認するためにIKControlをテストしてください:
手首
肘の制約があっても、IKControlは手首に対して非現実的なポーズを生成することがあります。

手首の回転を制限するためにBallSocketConstraintを追加することでこれを改善できます。これは肘にHingeConstraintを追加するプロセスに似ていますが、この制約のLimitsEnabledプロパティを使用して手首の可動範囲をさらに制御できます。
手首のためにBallSocketConstraintを追加するには:
- ExplorerでモデルのLeftHandを見つけて、⊕ボタンをクリックします。
- LeftWristConstraintという名前のBallSocketConstraintを追加します。
- モデルのLeftLowerArm.LeftWristRigAttachmentを見つけてアタッチメントを追加します:
- ⊕ボタンをクリックし、LeftWristConstraintAttachment0という名前のAttachmentを追加します。
- ビューポートでアタッチメントを選択し、Rotateツールを使用してアタッチメントを回転させ、黄色のPrimaryAxisがモデルの指先を指すようにします。

- LeftWristConstraint.Attachment0プロパティを新しいLeftWristConstraintAttachment0に設定します。
- モデルのLeftHand.LeftWristRigAttachmentを見つけてアタッチメントを追加します:
- ⊕ボタンをクリックして、LeftWristConstraintAttachment1という名前のAttachmentを追加します。
- LeftWristConstraintAttachment0.CFrameOrientationプロパティをコピーしてLeftWristConstraintAttachment1.CFrameOrientationプロパティにペーストします。
- LeftWristConstraint.Attachment1プロパティをこの新しいLeftWristConstraintAttachment1に設定します。
- ExplorerでLeftWristConstraintを選択します。
- Propertiesウィンドウで以下を設定します:
- LimitsEnabledを有効にします。
- UpperAngleを80に設定します。これは制約の軸が回転できる角度を制御し、80度は手首が曲がることができる程度に相当します。
- キャラクターに応じて、円錐が指す方向を微調整することができます。これはRotateツールを使用して制約のAttachment0を回転させることで行います。
LeftWristConstraintを選択すると、手首の動作範囲を視覚化する緑の円錐が表示されます。

制約が設定されたら、キャラクターの前で手を下に指した状態でIKControlをテストすると、手首がより現実的に回転し、曲がるはずです。