こんにちは、株式会社Leon Gameworksの遠藤です。
今回は、アニメーションシーケンスに仕込んであるAnimNotifyを他のAnimNotifyに置き換えるツールを作成していきます。
0:動作環境
本記事はUE5.4.4を基に執筆しており、エディタの言語は「英語」でスクリーンショットを撮影しております。
本記事で作成するツールのプロジェクト一式のデータは、以下からダウンロードできます。
1:準備
まずは、置き換えるためのアニメーションシーケンスを用意します。
マネキンの走りモーションに、足音を鳴らすようなかたちで「PlaySound」Notifyを仕込みました。

次に、置き換えるためのAnimNotifyクラスを作成します。
コンテンツブラウザからブループリント(BP)を作成し、親クラスには「AnimNotify」を指定します。

アセット名は「BP_MyAnimNotify」としました。

2:置き換えツールの作成
準備ができたら、AnimNotifyの置き換えツールを作成していきます。
今回はEditor Utility Blueprintで作成していきます。

親クラスには「Asset Action Utility」を指定します。

アセット名は「EUB_ReplaceAnimNotify」とします。

作成した「EUB_ReplaceAnimNotify」を開き、「ReplaceMyAnimNotify」という関数を作成します。

関数を作成すると、アセットの右クリックメニューから[Scripted Asset Actions]より関数を実行できるようになります。

作成したReplaceMyAnimNotifyから、選択中のアセットを[AnimSequenceBase]でキャストするように繋ぎます。
[AnimSequenceBase]にすることで、アニメーションモンタージュやアニメーションコンポジットなど、アニメーションシーケンス以外のアセットも対応できます。

キャストしたAnimSequenceBaseから[Replace Anim Notifies]に繋ぎ、[Old Notify Class]に「Play Sound」、[New Notify Class]に「BP My Anim Notify」を指定します。

最後に[Class Default]から[Supported Classes]に「AnimSequenceBase」を指定して、アニメーションシーケンス関連のアセットでのみ実行できるようにします。

これでツールの完成です。早速実行してみましょう。
3:値の引き継ぎ
置き換え前のAnimNotifyからプロパティの値を引き継いで置き換え後のAnimNotifyに反映することも可能です。
配置済みの[Replace Anim Notifies]の[On Notify Replaced]に[Create Event]ノードを繋げます。

「Create Event」のプルダウンメニューから、[Create a matching function]を選択します。

そうすると自動で関数が作られるので、関数名を「OnReplaceAnimNotify」に変えておきましょう。

このイベントでは、置き換え時に置き換え前のAnimNotifyと置き換え後のAnimNotifyを引数から取得できるので、キャストすることでプロパティ値を引き継ぐことができます。

4:便利なAnimNotify関連の機能
他にも、AnimNotify関連の便利なノードが用意されているのでまとめて紹介します。
AnimNotifyの追加/削除

Trackの追加/削除

AnimSequence内の情報取得

AnimStateの置き換え

AnimSequence間でAnimNotifyのコピー

5:まとめ
今回はAnimNotifyの自動置き換えツールの作成方法について解説しました。手動での作業コストを大幅に減らせると思いますので、アニメーションシーケンスアセットが多いプロジェクトには特にご活用ください。
本記事で作成したツールのプロジェクト一式のデータは、以下からダウンロードできます。

株式会社Leon Gameworks
●公式サイト
www.leon-game.co.jp
●X(Twitter)
@Leon_Gameworks

トンコツ(遠藤俊太)
●トンコツ開発ブログ
shuntaendo.hatenablog.com
●X(Twitter)
@tonkotsu3656
TEXT_トンコツ(Leon Gameworks)
EDIT_小村仁美 / Hitomi Komura(CGWORLD)、オムライス駆