ネリスさん備忘録

主にUE4の備忘録を残すよ!

【UE5】サードパーソンテンプレートを見るぞ!!!

UE5きた!
とりあえずサードパーソンテンプレートを解体していく!

開いたらいきなりこれだよ…
地形がまず違う

f:id:LunaNelis:20220407002320p:plain

とりあえずまず目につくのはグリッド状のマテリアル
1メートル間隔で太線になってるから距離を測るのにもってこいだし
パーツをきっちりハメやすい。
ちょっと前に無料で配布されていたBlockoutToolsPlaginのような便利さを感じる…
そのマテリアルの中身を見てみると、なんかやけにすっきりしてる

f:id:LunaNelis:20220407012255p:plain

というのも、その左下にこんなノード群が。

なるほどね。マテリアルもパーツ化できるようになったわけね

f:id:LunaNelis:20220407012526p:plain

このNamedRerouteDeclarationっていうノードがパーツ化の正体か

f:id:LunaNelis:20220407012734p:plain

ふうむ、こんな感じで1度作った変数をローカル変数のように保存して
別の場所で取得できるノードってわけだぁ。
ありがちだったスパゲッティを大幅に軽減できるし、ノード整理がしやすくて大変Good

作ったNamedRerouteDeclarationを使いたい場合は、ノードにつけた名前(画像だと「AA」)を検索すれば出てくるみたいね

f:id:LunaNelis:20220407012854p:plain


そんなわけでマテリアルも便利になったし、1メートルのグリッドもデフォで入れてくれててすごい便利になったね。
マテリアルインスタンスで使われてるから、ライン幅とか色とか、結構調整できるから必要に応じて増やそう

そしてプレイ。
デフォルトでFootIKが入ってる…
走りモーションやジャンプモーションも以前のものより滑らかで、つなぎ目が見えなくなってる。

f:id:LunaNelis:20220407013908p:plain

実装を見に行こう…

とりあえずBP。
こっちは前と変わってないみたいだし割愛

f:id:LunaNelis:20220407015240p:plain

アニメーションブループリント(ABP)は、ABP_Quinnっと
クインっていうのね。

実装は……?
AnimGraphも無い…なぜ動いているんだ!詰んだ/(^o^)\オワタ

f:id:LunaNelis:20220407015433p:plain

ということもなく、コメントにもある通りABP_Mannyの子クラスであり、実装はすべてそっちで書かれている。
ABP_Quinnはアセットオーバーライドの機能により、対応するアニメーションを女性型のアニメーションに置き換えるだけとなっている。
これすごいね。ガワを変えるだけならこれで済むって話よ。汎用アクションを1回書くだけでいいからすごい楽ねー

あ、MannyとQuinnでマネキンね…

f:id:LunaNelis:20220407015745p:plain

処理の本体はABP_Mannyのほうということで、こっちを見に来た。
色塗る前のアイアンマンっぽいね。

処理の内容は

  1. 初期化時に親のCharacterとMovementComponentを取得する
  2. 更新時、使用者がCharacterであれば処理を実行。Sequenceにより3種の処理を行う。
    これにより、キャラクター以外で利用されている場合には何もしないようになる。(Idleモーションするだけ)
  3. Sequenceの上段:MovementComponentから移動量であるVelocityを取得。
    合わせて移動速度を取得
  4. Sequenceの中段:平たく言うと、歩いているかのフラグ
    加速度があり、移動速度が一定以上であれば「歩いている」と判断する
  5. Sequenceの下段:空中にいるかどうかのフラグ

UE4のマネキンと基本的には同じだが、4番の歩いているかのフラグが新たに追加されている。

f:id:LunaNelis:20220407020819p:plain

そしてこれがAnimGraph。
UE4のマネキンと結構違うのねー

とりあえずここで見れる範囲で言うと、AnimMontage用のスロットがすでに刺さっている事。
MannyのアニメーションにはAnimMontageはないため、おそらくこれを流用した人がそのままMontageを使ったアクションを扱えるような配慮。優しい

それと、コントロールリグが挟まっていること。
あとで書くけどこれはFootIKをしてる。

f:id:LunaNelis:20220407022004p:plain

MainStatesの中身
なんか分離しとる…

とりあえず、Locomotionは↑の画像のLocomotionのことみたい。
分かりにくいから書き足し。
ToFallingとToLandの2つが新しくできたステータスエイリアスノードってやつみたい
ざっくりいうと、このノードにくっついてる条件(⇔みたいなヤツ)を、設定したステート中に満たすとワープしてこれるというノードらしい

f:id:LunaNelis:20220407025441p:plain

ToFallingだと、Locomotionにいるときに落下フラグがTrueになった場合に
ToFallingにワープし、そのままFallLoopアニメーションに切り替わる。
もし上昇している場合は、Jumpモーションをした後に落下アニメーションを行う。

f:id:LunaNelis:20220407025918p:plainf:id:LunaNelis:20220407030003p:plain

ToLandはその逆ってことで、空中にいるステート中に落下フラグがFalseになる(着地した)場合、着地アニメーションを再生し通常のLocomotionに戻る。という挙動らしい。
なるほどなぁ。複数のステートの所在から、別のステートにワープできるからかなりすっきりするねー

さて、Locomotionはどうなってるかというと、こっちはシンプル
通常はIdleを再生してて、移動したらWalk/Runを再生する。
Walk/Runは移動速度に合わせてブレンドスペースで再生している。これはUE4のころから同じね

f:id:LunaNelis:20220407030414p:plain

 

そして最後はコントロールリグ。
中身を見てみる。ダブルクリックっと。

f:id:LunaNelis:20220407030726p:plain

ヴォエッ!!

f:id:LunaNelis:20220407030759p:plain

とりあえず、分解してみていく(ぶっちゃけコメントを翻訳すれば大体わかるけど)

  • Step1
    FootIKするフラグがTrueならIKのトレースを実行する。
    つまるところ、地面に着地しているときはFootIKをするってこと。
    自作したFootTrace関数によりトレースを伸ばし、足を下ろさないといけないかどうかチェックする
  • Step2
    Step1で取得したオフセットに向かって座標の補間を行う。
    これがないと、足がすぐ最終地点になっちゃうから、ゆっくり足を動かすためにやる。
  • Step3
    Step2の右側にあるやつ。
    足を下に伸ばす都合上、胴体を下げないと足が届かないので、より下に伸ばす足の分、胴体を下げることにする。
  • Step4
    実は今までやってきたのは変数への値の設定だけで、実際の体に値を設定していなかった。
    というわけで、右足、左足、胴体(骨盤)にStep2で計算した値を設定する
  • Step5
    FullBodyIKというノードを使って、なんかいい感じにする!(わからん)

分解してみれば、まぁFootIKの処理としては至極普通の流れであることがわかる。

実行されている見た目を見るとなおわかりやすい。
胴体を右足が下ろさなきゃいけない分下げる。(これのせいで当たり判定が見た目とかなりズレる)
左足はなんかいい感じに曲がる

f:id:LunaNelis:20220407033239p:plain


長くなったけど、UE4の時の雰囲気を残しつつ、テンプレートの時点で満足度できるほどの移動設定がされていて、このまま使えてしまうような親切度合いとなっていた。

 

変化してる点は多いけど、要点を押さえておけばUE4のときの感覚をあまり崩さずに使えそうだなぁ

 

今度は自作キャラ突っ込んで、リターゲットとか試してみようかな