MotionMatchingを試します!(^o^)
今回はUE5.4でMotionMatchingをだいぶ簡易的に試してみました。
FootIKも移植して設定してみました。
だいぶ動きが不自然な部分が多いので
◎参考資料
Your First 60 Minutes With Motion Matching | Tutorial
https://youtu.be/S4aBd64t-hY?si=NEPUYfeQXHtgJ5QR
https://www.youtube.com/watch?v=RpSDdKcdNEI
※UE5.4.3で検証しています。
※間違っている部分等ありましたらコメントいただけると幸いです。
※画像をクリックまたはタップすると大きくできるので活用ください。
モーションの準備
今回はLyraからアニメーションを取り出します。
まずはLyraStarterGameをインストールします。

Lyraプロジェクトの下記フォルダまで移動します。
Game/Characters/Heroes/Mannequin/Animations/Locomotion/Unarmed
フィルターでアニメーションシーケンサーを選択して、
シーケンサーのみを出力するようにします。

シーケンサーのみを選択して移行を選択します。

選択したら今度はシーケンサー以外のファイルのチェックを外して、
シーケンサーのみを選択するようにします。

これで移行すれば完了になります。
MotionMatchingの設定
モーションを移行したらMotionMatching用に、
Motion Trajectoryプラグインにチェックを入れます。

そしたら移行したモデルがアニメーションシーケンスなので、
ボーンを変更してあげます。
スケルトンを交換でSK_Mannequinを選択して交換します。

これでアニメーションシーケンスのボーンの設定は完了したので、
プロパティマトリックスを開きます。

開いたらリスト上にアニメーションシーケンスが並んでいるので、
Ctrl+aで全選択して「EnableRootMotion」と、
「ForceRootLock」にチェックを入れてこれで設定完了になります。

今度はMotionMatchingの動作設定を作成していきます。
ポーズ検索スキーマを作成しておきます。
ポーズ検索スキーマの方で行っていることは主に下記の部分を設定しています。
※今回は特に設定変更がないので設定している内容だけ説明します。
・どのスケルタルメッシュを活用してアニメーションを行うかの設定
・どのボーンの動きを察知してアニメーションを選定するかと重要度合いの設定

続いてポーズ検索データベースも作成します。

データベースの方でアニメーションシーケンスを追加していきます。
追加する際はコンテンツブラウザからドラッグして追加を行います。

今回追加しているアニメーションシーケンスは下記になります。
・MF_Unarmed_Idle_Break
・MF_Unarmed_Idle_Ready
・MF_Unarmed_Jog_Bwd
・MF_Unarmed_Jog_Bwd_Pivot
・MF_Unarmed_Jog_Bwd_Start
・MF_Unarmed_Jog_Bwd_Stop
・MF_Unarmed_Jog_Fwd
・MF_Unarmed_Jog_Fwd_Pivot
・MF_Unarmed_Jog_Fwd_Start
・MF_Unarmed_Jog_Fwd_Stop
・MF_Unarmed_Jog_Left
・MF_Unarmed_Jog_Left_Pivot
・MF_Unarmed_Jog_Left_Start
・MF_Unarmed_Jog_Left_Stop
・MF_Unarmed_Jog_Right
・MF_Unarmed_Jog_Right_Pivot
・MF_Unarmed_Jog_Right_Start
・MF_Unarmed_Jog_Right_Stop
追加したらアニメーションBPを作成して設定していきます。
まずはアニメグラフ内の動きを作っていきます。
motionmatchingで検索して「ポーズ検索」の「MotionMatching」を選択します。

MotionMatchingを作成したらDatabaseに先ほど作成した、
ポーズ制作データベースのファイルを指定します。
指定することが完了したら、
ポーズをドラッグして「Pose History」を作成します。

ここまで完了したら今回のキャラクターに適応していきます。
作業としてはキャラクターキャラクター軌道コンポーネントを追加します。
キャラクターで検索するとでてくるかと思います。

こちらを設定したらアニメーションBPのイベントグラフ側の処理を作成します。
TryGetPawnOwnerからCastして操作するキャラクターBPを変数で保持して、
先ほどキャラクターBPに追加した軌道コンポーネント情報を更新しています。
※BP Third Person Character変数はキャストしたところから作成しました。

そして再度アニメグラフ側を開いて、
「Pose History」というものを追加したかと思いますが、
Trajectoryの指定が行われていないので設定します。
Tranjectoryのリストを選択してバインディングリストから、
プロパティの「Character Trajectory」の「Trajsectory」を選択します。

ここまで設定したらAnimationBPも完了になります。
最後まで設定すると下記の画像になります。

最後にキャラクターBPの方のAnimクラスを作成したBPを適応して、
CharacterMovementのキャラクタ移動(回転設定)で、
UseControllerDesiredRotationをON、Orient Rotation to MovementをOFFにします。


これで設定は完了になります。
実際に動かした動画はこちらになります。
FootIKの追加
動画のほうで見てみると若干足が浮いている状態に、
なってしまっているのでFootIKを設定していきます。
元々設定してあるThirdPersonCharacterのFootIK用ノードを活用します。

アニメーションノードの方はこれでOKで今度はイベントグラフ側を更新します。
CharacterMovementをCharacterBP変数から取得して、
Is Fallingの状態かどうかをチェックする処理を追加して完了になります。

実際に動かしてみましょう。
これで足の不自然な隙間はある程度緩和されたと思います。
デバッグコマンドがあり「a.CharacterTrajectory.Debug 1」を活用してます。
最後に
こちらで設定の説明は以上になりますが、
このままだと複数の動作で不自然な箇所が多いので、
各種設定をまとめた内容も作成したいと思います。