アニメーションブループリントで モーション合成
はじめに
ゲームのサンプル書いているけど仕事のほうが忙しく、作業すすまないため Tipsを書くことに
Tipsと言う名の、自分のためのメモでもある
今回の内容
ブループリントに関して何も言及していないのにアレだが アニメーションブループリントは、通常のブループリントと全く違う。別物である アニメーションの合成機能と簡単な計算しかないので この間仕事で使った機能を
アニメーションブループリントを作成する
テンプレートより ブループリントの ThirdPersonを選ぶ
Content/Mannequin/Animations/ThirdPerson_AnimBP があるのでそれを開く このファイルが今回HACKする アニメーションブループリントだ。
同じフォルダに複数ファイルがあるが
ThirdPerson_IdleRun_2D これは、後述するブレンドスペース。名前は2Dになっているが中身は BlendSpace1D なんでだ?? それ以外は JumpやWalk、Run、Idleの モーションファイル
初期状態
テンプレートを実行したら
TPS視点でグレーマンが 移動、カメラ回転、ジャンプ が出来るだけの単純なデモが実行される コントロール部分は ThirdPersonCharacterの EventGraphにルーチンが書いてあるのでそちらを参考に。
今回のアニメーションで注目すべきは まず歩き。 アナログパットを少しだけ傾けると ゆっくり。大きく傾けると 前傾姿勢になり走っていると思う これは Idle、Walk、Runを 速度によりブレンドしているので、なめらかにつながっている
この、アニメーションのブレンドを、ブレンドスペースという
先程のThirdPerson_IdleRun_2Dというファイルで Idle、Walk、Runを合成している
2つ目は ジャンプ。これは ジャンプスタート、ジャンプ中、ジャンプ終了と3つのアニメーションを組み合わせて、ステートマシンを形成している
とりあえず今回注目は この2つ
ブレンドスペース
ThirdPerson_IdleRun_2D Unrealではヘルプを読むかぎり 現状は2軸のアニメーションブレンドしか出来ないが将来的に拡張する予定らしい。 今回は Idle~Runまでの1軸のブレンドなので、 BlendSpace 1Dを使っている
似た機能にAimOffsetがあるが、こっちは加算アニメーション等 BlendSpaceより多少機能が充実しているらしい
ThirdPerson_IdleRun_2Dを開くと 下記の画面がある
縦軸がスピードで、今回はレンジが 0-375になっている。 黒い点が Idle、Walk、Runのモーションで、Speedという引数により ブレンド係数が変わるようになっている
今回は1Dなので横軸はないが、例えば 上半身を左右に動かす Directionという引数を横軸にもって 2Dでブレンドすることも出来る
プレビューで簡単にブレンドが確認できるのでとても便利ですね。
AnimGraph(Idle/Run state)で こんな感じに Speedを引数に アニメーションを作ります
ジャンプ ステートマシン
ステートマシンを開く
初期状態が Idle/Run(先程のブレンドスペース)で、ジャンプをすると JumpStart->JumpLoop->JumpEnd->Idle/Run という流れ
それぞれ該当する モーションをFinalPoseにすれば良い。簡単。
ブループリントから変数を受け取る
色々な理由で ブループリントから値を渡したい事があると思う。
今回は ThirdPersonCharacterから TestHogeというBool値を渡す
ThirdPersonCharacterのEventGraphで、 ZでTestHoge設定、Xでクリア する
これを ThirdPerson_AnimBPのアニメーションBPで取得するには PawnOwnerからCastしてThirdPersonCharacterを取得する ここで気をつけるのは、アニメーション ブループリントのOwnerはAnimInstanceであって、キャラクターではない キャラクターは PawnOwner
TryGetPawnOwnerを ThirdPersonCharacterにキャストし、そこから TestHogeを取得。 Blend Poses by bool にて、TestHogeがtrue時は 今まで通りのブレンドスペース歩き falseの時は Idleを設定してみた
実行結果は、Zキーを押すと ブレンドされた歩きに、Xキーを押すと Idleのまま地面を滑る ようになり、正常に ブループリントから値を渡せた事が確認できる
各種ブレンド
上記に Blend Poses by bool が出たので、各種ブレンドを簡単におさらい 基本的にはアニメーションブループリントは アニメーションのブレンドと、そのための簡単な計算しかできませんので ブレンドを覚えたらほぼ終わりです
左から
Blend
一番単純なブレンド。 AとBの2個のアニメーションをブレンドするのみ。 Alphaでブレンド係数を変更できます
Blend Poses by bool
ActiveValue 引数のbool値により、TruePoseとFalsePoseに分岐します。ブレンド無し。 各モーションの補完時間も指定可能
Blend Poses by int
ActiveChildIndex 引数のint値により 複数のモーションに分岐。ブレンドなし AddPinでポーズは複数追加できる 各モーションの補完時間も指定可能
Layered blend per bone
影響ボーンを指定し、ボーンごとにブレンドすることが可能 指定ボーン以下の子ボーンが合成される。ボーンも複数指定可能 例えば 右腕だけ合成、上半身だけ合成、右腕と左腕のみ合成 等を行うことが出来る Add pinで ブレンドを増やせるので、ウエイト違いで複数合成可能
Blend Poses (Enum)
基本的に ステートマシンを使うが、Enumを使ってアニメーション制御も可能 ActiveEnumValueにEnum変数を指定し、そのEnum値により ポーズを分岐させる事が可能
以上!