UE4でアニメーションを行うためには、本来はアニメーションブループリントを使ってアニムグラフ上で管理する必要があります。
しかし場合によってはアニムグラフ上で全てのアニメーションをステートマシンで管理すると複雑なステート遷移により面倒なこともあります。
そのためにUE4にはステートマシンを使わないアニメーションの再生方法も多数用意されています。
今回はあえてステートマシンを使わずにアニメーションの切り替えを行う方法を解説します。
ステートマシンを使わなくても管理するわかりやすい方法として、列挙型(Enum)を使う方法があります。
列挙型アセットの作成と定義
まずはブループリントアセットとして列挙型を作成します。
新規アセットから"ブループリント"→"列挙型"と選択します。
名前をつけて保存し、アセットを開き列挙型の定義を行います。
"新規"ボタンから自由に定義を追加してください。
これで列挙型を使用する準備ができました。
アニメーションブループリントのイベントグラフで列挙型変数を受け取ってアニムグラフで渡す
アニメーションブループリントのイベントグラフ上で列挙型変数を受け取ります。
この時、クラスブループリント上で列挙型変数の内容は随時書き換えているとします。
アニメーションブループリント内で同様の列挙型変数を作成しておき、書き換えた内容をキャストするなりして値を受け取ります。
ここではわかりやすくするためにUpdate時にキャストをしていますが、できればInitializeで一度やっておいて変数にクラスの参照を保存しておきましょう。
あとはアニムグラフ上に移動して、"Blend List by Enum"というカテゴリーから自作した列挙型の"Blend Poses"ノードを探して配置します。
初期状態ではピンがありませんので、ノード上で右クリックして"エレメントにピンを追加"から自由なポーズのピンを追加します。
必要なポーズのピンを追加したら、"Active Enum Value"ピンに作成した列挙型のGetノードを接続します。更にそれぞれのポーズピンにもアセットブラウザからアニメーションをそれぞれ配置し、接続します。
最後に"Blend Poses"ノードと"Final Animation Pose"ノードのポーズピンを接続すれば完了です。
あとはこれでクラスブループリント上で列挙型変数の値を変えるだけで自由にアニメーションを変更可能です。
この方法はステートマシンに頼らず複雑なアニメーション遷移が必要となった時にも重宝します。
場合によっては普段ステートマシンに頼りながら、このような切り替え方法も併用するとより管理しやすいアニメーション遷移ができるようになります。