【UE4】アニメーションモンタージュによる連続攻撃

アニメーションモンタージュで複数のアニメーションを一つとして扱い、アニメーションの通知を駆使する事でコンボ、連続攻撃が実装できるようなので試してみました。
※画像はクリックで拡大できます
アニメーションモンタージュの作成
コンテンツプラウザで右クリック、「アニメーション」→「アニメーションモンタージュ」を選択する事で作成できます。
アニメーションモンタージュにアニメーションを追加する
作成したアニメーションモンタージュを開くと、プレビュー画面に加えて「モンタージュ」とか「セクション」とか「通知」とかあるのが確認できます。

「モンタージュ」の部分に右側のアセットプラウザから「攻撃1」、「攻撃2」のアニメーションを追加します。

モンタージュセクションの追加
追加した「攻撃1」、「攻撃2」アニメーションのちょっと上側にある部分を右クリックして「新規モンタージュセクション」を選択します。
追加したモンタージュセクションは「攻撃2」の開始位置へセットする事で、ブループリントの制御でアニメーションをこの位置にジャンプさせる事ができます。

アニメーション通知を追加する
編集部分をスライドして下の方に、「通知」項目があるので右クリック→「通知を追加」→「新規通知」を選択してアニメーション通知を追加します。

追加した通知の「詳細」を確認し、「Montage Tick Type」を「Branching Point」に変更します。こうする事で通知タイミングがアニメーションに完全に同期されるようです。「Queued」と比較すると、一度に多くの通知を動作させた場合処理不可がかかるようです。
今回は三つの通知を追加しました。
・NormalAttackEnable
攻撃1の途中で通知され、攻撃2を可能にするフラグを制御する通知です。
・NormalAttackBranch
攻撃1の終了を通知します。攻撃2を行うかの分岐点です。
・NormalAttackEnd
攻撃2の終了を通知します。これで通常攻撃は終了です。
アニメーション通知のブループリント呼び出し
アニメーションモンタージュに追加した通知は、アニメーションBPで呼び出す事ができます。
今回は「攻撃1」、「攻撃2」の一例ですが、Characterクラスのブループリントで攻撃ボタンが押されたらプレイヤーが攻撃状態になるという処理から、アニメーションBPへ処理を繋げています。
Characterクラスで「イベントディスパッチャー」のNormalAttackDispatcherを作成し、攻撃ボタンを押したら呼び出します。

続いて、アニメーションBPのイベントグラフでアニメーション通知を受けた際の制御を記述します。
Characterクラスのブループリントで作成したイベントディスパッチャー、NormalAttackDispatcherにカスタムイベントのNormalAttackEventをバインドする事で、Characterクラス側の攻撃ボタンを押したときの処理と連動してアニメーションの処理を行うようにします。

バインドの処理は一回で良いので、初期化処理で行ってます。
アニメーションBPでのアニメーションモンタージュに関する処理が下記画像のように行ってみました。

アニメーションモンタージュに追加した通知が、「AnimNotify_~~~」で呼び出されているのが確認できると思います。
アニメーションモンタージュの再生は「Montage Play」、攻撃2の初に置いたセクションへのジャンプは「Montage Jump to Section」、アニメーションモンタージュの終了は「Montage Stop」で行っています。
マルチゲートで攻撃ボタン入力があった際に攻撃1、攻撃2とそれぞれ振り分けて、攻撃終了時にはマルチゲートをリセットするように注意しています。
スロットアニメーションによる再生
アニメーションモンタージュはスロットアニメーションによって再生します。
アニメーションBPのアニムグラフで、右クリック→検索に「Slot」と打ち込めばアニメーションモンタージュ内で定義されていたモンタージュグループ名で候補に挙がって来ると思うので、スロットを最終アニメーションポーズに繋げば完了です。

アニメーションステートとは独立して構成できるので、様々な用途が広がりますなぁ。
動作確認

アニメーションモンタージュの再生、セクションへのジャンプ、アニメーション通知、いずれも大丈夫そうです!
ディスカッション