はじめに
プロフィールにも少し書いてある通り自分は仕事ではUnityを使っているのですが、普段振られることが多いのがエディタ拡張周りのタスクです。
(ツールウィンドウやカスタムメニューの追加、特定のアセットがインポートされたときに何かしらの処理を行う、等々...)
最近「自分が普段やってるこの辺の作業ってUEだとどうやるんだろう?」と思ったので取っ掛かりやすいところ(今回はAssetActionUtility)から調べてみました。
参考にしたサイト様
実際にやってみる
実行環境:UnrealEngine 5.6.1
デフォルトである程度の量のアセットがあれば何でも良いので、今回はUEのThirdPersonテンプレートを使います
応用編
特定のアセットを選択したときだけ関数を実行したい場合
Class DefaultsのSupported Classesで選択時のメニューを追加したいアセットの種類(というよりクラス)を設定します。

例えばMaterialを設定した場合はMaterialを選択したときだけメニューが追加されます


※ちなみに複数個設定した場合はリスト内のどれかに該当すればメニューが追加されるみたいです

選択したアセットの情報がほしい時
Get Selected Assetsから現在選択してるアセットの一覧を得ることができます

選択したアセットを一括でリネームする、なんていうのをやりたい場合はこんな感じです

特定の条件を満たすアセットにのみ処理を実行したい場合
Class DefaultsのSuppoerted Conditionsで処理の実行可否を動的に切り替えることが可能です。

Filterの欄に関数の実行条件を書いていくのですが、その際に使うのがアセットのメタデータと条件演算子(==や>=)です。
メタデータについて
メタデータというのはアセットにカーソル合わせたときに出る↓みたいなやつのことです(画像はマテリアルを選択したときのもの)

アセットのパスは勿論のことマテリアルならシェーディングモデル、テクスチャであればフォーマット等のパラメータを実行条件として使うことができます。(詳しくはEpicの公式ドキュメントを参照)
実際にFilterを設定してみる
例えばLevelPrototyping/Materialsフォルダ下にあるアセットにのみ処理を実行したい場合はこのようにFilterを設定します。

こうすることでLevelPrototyping/Materialsフォルダ下のアセットを選択したときだけ関数を選択&実行できるようになります


また、Failure Reasonを編集することで選択したアセットが条件を満たしてなかった場合、メニューにカーソルを合わせるとその理由が表示されるようになります。


「条件を満たしてなければメニューから関数自体を非表示にしたい」という場合はShow in Menu if Filter Failsのチェックを外すことで非表示にできます


メニュー上での階層を変えたい場合
FUNCTIONSで追加した関数のDetailsからCategoryを編集することでメニュー上の階層をカスタムすることができます(初期値はDefault)


最後に
今回はAssetActionUtilityだけに絞りましたが他にもツールウィンドウを作ったり、既存の構造体・ActorのDetils(UnityでいうInspector)上での表示を変えたりとまだまだエディタ拡張でできそうなことはありそうなのでこの辺も調べて記事にできたらと思います。
(一応プログラマーなので次はC++に絡んだ記事にできればな~と...)





