読み込んだアニメーションが1サイクルしかない場合、そのアニメーションをループモーションにすることが可能です。
FBX Animation Importを使用してFBXアニメーションをロードします。
Motion clipを作成し接続します。
これはスケルトンのアニメーションをキャッシュし、各ジョイントの位置を表現したポイントのリストとして保存されます。
ビューポートで確認すると、Frame RangeとSample rateを元にキャッシュされたデータが表示されます。時間とともに変化することはなくなりすべてのポイントの情報がキャッシュして表示されます。
Motion Clipでキャッシュしたデータを再度アニメーションとして再生するには、Motion Clip Evaluate を使用します。
ここまでだと単純に読み込んだアニメーションをクリップ化し、再度アニメーションに戻しただけです。これをループアニメーションにします。
MotionClipとMotionClipEvaluateの間にMotionClipCycleを追加します。
これはその名前の通り、クリップを必要な回数ループします。
Cycle BeforeとCycle Afterが設定できるので、現在のアニメーションの前後にどれだけアニメーションを繰り返すかを指定します。
例えば上記の王にCycles Afterを3に設定した場合、実際のアニメーションを再生後、全く同じアニメーションを3回繰り返します。
これだとあまり意味がありません。アニメーションの終了と、サイクルアニメーションの最初の位置がつながっている必要があります。
まずはアニメーションのループに使用するフレームを抜き出します。
Frame Rangeを有効にします。
エクスプレッションでタイムレンジの最初と最後のフレームが入力されています。
最終フレームが表示されている部分で右クリックし、Delete Channelsを選択します。
次にアニメーションをループしたいフレームを指定します。
ただ、これでもこのフレームをただ繰り返しているだけです。
1フレーム
35フレーム
36フレームで元に戻ってアニメーションが繰り返されます。
アニメーションにオフセットをかけるにはLocomotionを使用します。
Locomotionは日本語で移動という意味があるので、ループ時のTransformを調整してくれます。
Compute Locomotionを選択します。
Locomotion Jointを選択する必要があります。
ここでは全体の移動や回転の起点となるジョイントを選択します。おそらく重心となっているジョイントを選択することになると思います。
次にループ時に移動、回転の起点となるジョイントを選択します。
Match TranslationをCustom Jointに設定します。
ここでLocomotion Jointを選択すると、上で設定したジョイントがそのまましようされます。
今回は歩いているジョイントなので地面についている足を起点にします。
35フレームでRightFootを着地し、ループ後はLeftFootを持ち上げて移動するアニメーションです。
そのため、Transform JointではRightFootを使用しました。
次にジョイントの向きを一致させるか設定します。
ジョイントのUp軸を合わせる設定しました。
最後にループ間のアニメーションブレンドを行います。
MethodはPreserve Lengthを使用します。
これは各ループの長さが入力アニメーションと同じになるように計算します。
切り取ったタイムレンジのループを前のループに重ねたい場合は、Overlapを使用します。
Blend Typeでブレンド時の補間を設定します。
設定後、MotionClipEvaluateで確認するとアニメーションが適切にループされます。