Unreal Engine 4でおっさんをアクションに合わせてアニメーションさせる!

2019年3月3日

SculptrisとBlenderで作ったおっさんモデルは、無事UE4で操作する事ができました!

今回は既にUE4にインポートしてある、Blenderで作ったおっさんモデルのアニメーションをおっさんのアクションに合わせて適用したいと思います。

※記事がポリシー違反とされたため、一部画像をテストで黒塗りにしています(汗

スポンサーリンク

アニメーションブレンドでスムーズなモーション遷移!

おっさんのアニメーションとして用意してあるのは、「待機」、「走る」、「ジャンプ」の三つです。

その中でも「待機」→「走る」と「走る」→「待機」のアニメーション遷移は、パッと変わるよりアナログスティックの傾き加減で徐々に変化していくと、リアリティが出てカッチョ良い気がしますね。

UE4には、このアニメーションブレンドを実現する機能として「ブレンドスペース」というアセットがあります。

コンテンツプラウザで右クリック、「アニメーション」を選択すると下の方に「ブレンドスペース」と「ブレンドスペース1D」があります。

「ブレンドスペース」と「ブレンドスペース1D」の違いですが、ブレンドスペースの方が例として移動速度と移動方向と複数のパラメーターを考慮した物に対して、ブレンドスペース1Dは例として「移動速度のみ」と一つのパラメーターを考慮したシンプルなブレンドを実現するための機能のようです。

今回おっさんは、シンプルな「ブレンドスペース1D」で行きたいと思います。

ブレンドスペース1Dを作成する際に、適用するスケルトンを指定するのでアニメーション対象のMeshのスケルトンを指定します。

作成したブレンドスペース1Dをダブルクリックすると、おっさんモデルが表示されているビューと、0.0~100.0の数字が書いてあるグラフっぽいのがあります。

今回、「待機」と「走る」のアニメーション遷移をおっさんの移動速度で行いたいと思うので、速度が0.0の時は「待機」のアニメーション、速度が100.0の時は「走る」のアニメーションをそれぞれアセットプラウザウィンドウから引っ張りだしてきて配置します。

グラフ中の緑色の菱形を動かすと、実際にブレンドされているアニメーションを確認できると思います。

これで「待機」~「走る」間のアニメーションブレンドは作成できました!

この作成したブレンドスペース1Dは次で作成するアニメーションBP内で配置するのに使います。

アニメーションBPでステートマシーンを作る!

次に、アニメーションBPを作成します。アニメーションBP内で、実際におっさんの速度を取得したり、先ほど作成したブレンドスペース1Dを配置する事で、アニメーション遷移制御を実現します!

コンテンツプラウザで右クリック、「アニメーション」を選択して「アニメーションBP」を作成します。

作成する際に、親クラスとターゲットスケルトンを指定する箇所があるので、親クラスは「AnimInstance」ターゲットスケルトンはアニメーション対象Meshのスケルトンを指定します。

作成したアニメーションBPをダブルクリックすると、「アニムグラフ」と「イベントグラフ」という項目があり、最初は「アニムグラフ」が開かれていると思います。

アニムグラフで右クリックし、検索欄に「ステートマシーン」みたいな感じで入力すると、「新規のステートマシーンを追加…」とあるので選択して追加します。

ステートマシーンの名前は適当に「Default」としました。この追加したステートマシーンと最終アニメーションポーズのResultの人型のマークを繋ぎます。

追加したステートマシーン「Default」をダブルクリックして中に入ります。

最初はEntryだけがある状態ですが、ここで右クリックして「ステートを追加…」を選択して、「Idle/Run」と「Jump」を追加しました。おっさんの初期状態は「待機」になって欲しいので、EntryとIdle/Runを繋ぎ、条件によってジャンプするのでIdle/RunからJumpへ相互に行き来するよう繋ぎます。

また、この段階で「待機」~「走る」のアニメーションブレンドへ影響のあるおっさんの移動速度用にfloat変数「MoveSpeed」と、ジャンプor落下の判定用bool変数「AifFlag」も用意しました。

Idle/Runをダブルクリックして中に入ります。ここはおっさんの移動速度によって「待機」と「走る」のアニメーションブレンドの予定地です。

ここで先ほど作成した「ブレンドスペース1D」の出番です!

自分は「OjisanAnimBlend」という名前にしましたが、アセットプラウザからドラッグ&ドロップでステート内に配置します。すると「OjisanAnimBlend」はfloat引数を取れるようになってます。

ここにさっき作成したMoveSpeed変数が入るように繋ぎ、最終アニメーションポーズとも繋ぎます。

「Idle/Run」から一旦出て、次は「Jump」に入ります。ジャンプは特に特別な事はせず、アセットプラウザからジャンプアニメーションを持ってきて配置します。

「Jump」から出て、今度は「Idle/Run」と「Jump」の間にある二つの丸いマークの中をそれぞれ記入していきます。

これがそれぞれ、Jumpになる条件、Jumpを終了する条件の記載場所になるので、さっき用意したジャンプor落下判定用のbool変数を使って条件判定を作ります。

これでアニムグラフの遷移は完了しました!コンパイルして保存しときます。

次はイベントグラフで変数AnimSpeedとAirFlagに、ブループリントでおっさんキャラクターの制御から値を取得していきます。

「Blueprint Update Animation」は毎フレームコールされるイベントですので、そこからスタートです。

「Try Get Pawn Owner」に関しては、このアニメーションBPはおっさんCharacterクラスが最終的に所持するので、OwnerとしておっさんのPawnにアクセスできます。

おっさんのPawnからGet Velocityで移動量、isFallingで空中判定ができますので、それらを変数に貰います。

これでアニメーションBPは完成となります!

最後に作成したアニメーションBPを、おっさんモデルのCharacterクラスBP内にある、Meshコンポーネントの詳細、「Animation」項目の「Anim Class」に指定します。

いざ、動作チェック!!

早速ビルドしてプレイしてみます!

おっさんが走り、跳びました!
アクションに合わせたアニメーションは無事、行えたと思います!

Sculptris、Blenderを経て、おっさんモデルはUnreal Engine 4でついに走り、跳ぶようになりました・・・・!(涙

スポンサーリンク