[UE5][C++] アセットアクション拡張 簡単解説

2023/06/04に公開

概要

アセットアクションで何かしたいという時のために
UE5でアセットアクションの実装がどのように行われているかを簡単にまとめました。
※一部UE4での古い実装タイプが使われているものがありましたが、
ほとんどはAssetDefinitionクラスを使うように移行しているようです(UE5.2)

前提

以下の記事の実装に基づいて説明します。
https://zenn.dev/hakuto_gamedev/articles/f7a24ce10abf74

用語説明

それぞれのメニュー項目の呼び方を決めておきます。
※本記事特有の呼称です。

  • アセットアクションメニュー ※InsertNotify
  • アクションメニュー ※InsertAnimNotifyToAnimMontage

以降上記に記した呼び方で説明を記載していきます。

大まかな実装要素

アセットアクションを拡張する際に、必要な実装は大まかに分けると以下の通りになります。

  1. アクションの実行関数
    → 今回はAnimNotifyを追加するという部分。
  2. アクションメニューの追加 ※省略可
  3. アセットアクションメニューの追加

アクションの実行関数

ExecuteAnimNotifyInsertToMontageが該当します。
コメント記載しているので、ある程度はそちらを読んでいただければ理解できるかと思います。

まだ試したことはありませんが、
ExposeOnSpawnのチェックに関しては、設定しないパラメータでは動作しないので、
使用しないのであれば、コードを除外しても問題ないと思われます。
※今回テストに使ったUAnimNotify_PlayParticleEffectでは、特に動作していませんでした。

アクションメニューの追加

FillCreateMenuで行っている処理が該当します。
今回はここでアクション実行関数のバインドや見た目上必要なパラメータな設定をしています。
※アイコンは適当に設定してます。

アセットアクションメニューの追加

DelayedAutoRegister変数が該当します。

FDelayedAutoRegisterHelper構造体でメニュー追加管理が行われているようです。
インスタンス作成時のコンストラクタでメニュー拡張のためのデリゲートを登録し、
エンジン起動時(厳密には初期化時)に登録されているデリゲートを呼び、
メニュー拡張した部分の処理が走るような構図になっているようでした。

つまり、ツールメニュー拡張したい場合は、
FDelayedAutoRegisterHelper構造体のインスタンスを作成しておくだけで
よいことが分かります。

まとめ

かなりざっくりとした内容になってしまいましたが、以上となります。
C++でも実装できるようにしておくと、
幅広く効率化可能なので覚えておいて損はなさそうです。

Discussion