LoginSignup
1
1

More than 1 year has passed since last update.

[UE5] MotionWarping Shallow Dive

Posted at


UE5 から追加された MotionWarping について浅瀬でちゃぷちゃぷしたメモ。

MotionWarping とは

Motion Warping (モーション ワープ) は、キャラクターのルート モーションをターゲットに合わせてダイナミックに調整できる機能です。

「古代の谷」サンプル では「キャラクターが障害物を飛び越えていく場面」にて機能紹介されていましたが、インタラクトでポイントに体を向けながら近づく、敵のレーザービームを避ける、においても使われています。
公式ドキュメントでは攻撃距離の調整について紹介されてたりで、汎用性がありますね。
ゲームで目標位置に向かって移動する実装は非常に多いので、エンジン側で機能が用意されるのは嬉しいですね!

MotionWarping 動かない、検索。

この機能はルートモーション前提で作られています。
eae9ee3f36b605c0c509ba1f1518fc92.png
AnimSequence の EnableRootMotion にチェックが入ってないと動作しません。
cadf604ae1b206d575c7251c8a472eaa.png
そして RootMotionModifierConfig の "AdjustmentBlendWarp" 以外は、アニメにルート移動値が含まれていないと動きません。
"SimpleWarp" はルート移動の [現在/総フレーム比率(指定区間)] により位置を計算する実装となっており、そもそも移動値が含まれていないと結果はゼロとなってしまうため。

AdjustmentBlendWarp を使った詳しいチュートリアル

[UE5] Motion Warpingでアニメーションによる移動量を自由にコントロール!
いつもお世話になっております。
InPlaceAnimation の場合は AdjustmentBlendWarp を使いましょう。

縦移動ができない問題

2021-07-07-18-50-33.gif
設定には "Ignore ZAxis" があり、デフォルトではオンになっています。
ae10ff9153ad395ca558f0acbf7c6ba4.png

平行移動の Z (アップ/ダウン) コンポーネントをワープするかどうかを指定します。

これを有効にした場合、キャラクター自身の CharacterMovementComponent による制御と衝突してしまい、そのままでは縦方向に動きません。
BP_GA_FunctionTest-EventGraph.png
移動区間は MovementMode を Flying にするのがよいでしょう。

RotationType: "Facing" が動かない問題

同期ポイントの回転に一致する、または同期ポイントに向くように、回転をワープするかどうかを指定します。

RotationType が Facing の場合、初期地点から目標地点に向けてキャラクターを回転させます。
なのですが、AdjustmentBlendWarp の場合 RotationType の初期化がされてません。エンジンの修正を待ちましょう。

シンプルに移動するだけの機能?

AdjustmentBlendWarp ってリニア移動だけなの?アニメに合わせて移動するだけなら、モンタージュ通知からの移動処理を作ればいいのでは?
facc451c5269b10fcbcc7568ca00de19.png
などとも考えましたが、実際やってみると "アニメに合わせた移動値" を設定するのもなかなか大変です。
簡単な平行移動くらいならなんとかなるが、インタラクション性があるアニメなど、複雑なものはアニメ側でつけてもらう方が、自然でよりよいワークフローとなるでしょう。
EnableRootMotion チェック外すマンでしたが、これからは RootMotion と仲良くなれるよう精進したいと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1