こんにちは、株式会社Leon Gameworksの遠藤です。

今回は、アニメーションシーケンスに仕込んであるAnimNotifyを他のAnimNotifyに置き換えるツールを作成していきます。

記事の目次

    0:動作環境

    本記事はUE5.4.4を基に執筆しており、エディタの言語は「英語」でスクリーンショットを撮影しております。

    本記事で作成するツールのプロジェクト一式のデータは、以下からダウンロードできます。

    今回のプロジェクトデータ

    1:準備

    まずは、置き換えるためのアニメーションシーケンスを用意します。
    マネキンの走りモーションに、足音を鳴らすようなかたちで「PlaySound」Notifyを仕込みました。

    ▲ アニメーションシーケンスの用意

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

    ▲ AnimNotifyクラスを基にしたBPを作成

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

    ▲ BP_MyAnimNotify

    2:置き換えツールの作成

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

    ▲ Editor Utility Blueprintの作成

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

    ▲ 親クラスに「Asset Action Utility」を指定

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

    ▲ EUB_ReplaceAnimNotify

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

    ▲ ReplaceMyAnimNotify関数の作成

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

    ▲ Scripted Asset Actions

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

    ▲ 選択中のアセットを[AnimSequenceBase]でキャスト

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

    ▲ AnimNotifyの置き換え関数を繋ぐ

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

    ▲ [Supported Classes]の指定

    これでツールの完成です。早速実行してみましょう。

    ▲ ツールの実行

    3:値の引き継ぎ

    置き換え前のAnimNotifyからプロパティの値を引き継いで置き換え後のAnimNotifyに反映することも可能です。

    配置済みの[Replace Anim Notifies]の[On Notify Replaced]に[Create Event]ノードを繋げます。

    ▲ 置き換え時のイベント作成

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

    ▲ [Create a matching function]

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

    ▲ 関数名の変更

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

    ▲ 置き換え時にプロパティ値を引き継ぐ

    4:便利なAnimNotify関連の機能

    他にも、AnimNotify関連の便利なノードが用意されているのでまとめて紹介します。

    AnimNotifyの追加/削除

    ▲ AnimNotifyの追加/削除

    Trackの追加/削除

    ▲ Trackの追加/削除

    AnimSequence内の情報取得

    ▲ AnimSequence内の情報取得

    AnimStateの置き換え

    ▲ AnimStateの置き換え

    AnimSequence間でAnimNotifyのコピー

    ▲ 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)、オムライス駆