Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 アニメーションの切り替えを列挙型(Enum)で行う

UE4でアニメーションを行うためには、本来はアニメーションブループリントを使ってアニムグラフ上で管理する必要があります。
しかし場合によってはアニムグラフ上で全てのアニメーションをステートマシンで管理すると複雑なステート遷移により面倒なこともあります。
そのためにUE4にはステートマシンを使わないアニメーションの再生方法も多数用意されています。

今回はあえてステートマシンを使わずにアニメーションの切り替えを行う方法を解説します。
ステートマシンを使わなくても管理するわかりやすい方法として、列挙型(Enum)を使う方法があります。

列挙型アセットの作成と定義

まずはブループリントアセットとして列挙型を作成します。
新規アセットから"ブループリント"→"列挙型"と選択します。

f:id:alwei:20160328215123p:plain

名前をつけて保存し、アセットを開き列挙型の定義を行います。
"新規"ボタンから自由に定義を追加してください。

f:id:alwei:20160328215223p:plain

これで列挙型を使用する準備ができました。

アニメーションブループリントのイベントグラフで列挙型変数を受け取ってアニムグラフで渡す

アニメーションブループリントのイベントグラフ上で列挙型変数を受け取ります。
この時、クラスブループリント上で列挙型変数の内容は随時書き換えているとします。

アニメーションブループリント内で同様の列挙型変数を作成しておき、書き換えた内容をキャストするなりして値を受け取ります。

f:id:alwei:20160328220020p:plain

ここではわかりやすくするためにUpdate時にキャストをしていますが、できればInitializeで一度やっておいて変数にクラスの参照を保存しておきましょう。
あとはアニムグラフ上に移動して、"Blend List by Enum"というカテゴリーから自作した列挙型の"Blend Poses"ノードを探して配置します。

f:id:alwei:20160328220329p:plain

初期状態ではピンがありませんので、ノード上で右クリックして"エレメントにピンを追加"から自由なポーズのピンを追加します。

f:id:alwei:20160328220444p:plain

必要なポーズのピンを追加したら、"Active Enum Value"ピンに作成した列挙型のGetノードを接続します。更にそれぞれのポーズピンにもアセットブラウザからアニメーションをそれぞれ配置し、接続します。

f:id:alwei:20160328220832p:plain

最後に"Blend Poses"ノードと"Final Animation Pose"ノードのポーズピンを接続すれば完了です。
あとはこれでクラスブループリント上で列挙型変数の値を変えるだけで自由にアニメーションを変更可能です。

この方法はステートマシンに頼らず複雑なアニメーション遷移が必要となった時にも重宝します。
場合によっては普段ステートマシンに頼りながら、このような切り替え方法も併用するとより管理しやすいアニメーション遷移ができるようになります。