こんにちは、株式会社Leon Gameworksの遠藤です。
今回は第5回で解説した「UIへの独自のメニューの追加方法」から、さらに一歩踏み込んだメニューのカスタマイズ方法について解説します。
また、C++を用いればカスタマイズの幅は大きく広がりますが、本記事ではブループリントのみでの実装方法を解説します。
0:動作環境
本記事はUE5.4.4を基に執筆しており、エディタの言語は「英語」でスクリーンショットを撮影しております。
本記事で作成するツールのプロジェクト一式のデータは以下からダウンロードできます。
1:準備
まずは第5回と同様に、登録するメニューのアセットを作成していきます。
メニューの実体として「EditorUtilityToolMenuEntry」を継承したEditor Utility Blueprint(以下、EUB)を作成します。

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

作成したEUB_MyMenuを開き、Detailsから以下のように設定します。
- 設定項目
値
- Name
MyMenu
- Label
MyMenu
- Style Set Name
EditorStyle
- Style Name
UnrealCircle.Thin

次に、メニューを登録するためのEUBを「Editor Utility Object」を継承して作成します。

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

作成したEUB_ResisterMenuを開き、Run関数からメニューを登録する処理を作成します。

第5回執筆時点から仕様が若干変わり、メニューの登録の際に「Get」ノードでToolMenuの参照を取得する必要がなくなり、「Add Menu Entry Object」ノード単体で登録ができるようになりました。
これで準備完了です。
作成したEUB_MyMenuの設定項目を編集してメニューをカスタマイズしていきましょう。
2:メニューの登録
既存の場所に登録
第5回では新規に場所を作成してメニューを登録しましたが、今回は既存の場所に登録したいと思います。
まずは前回と同様に登録場所を確認します。前回は「DefaultEditorPerProjectUserSettings.ini」を編集するかたちで編集モードに変更しましたが、今回はコンソールコマンドからモードを切り替えてみます。
コンソールコマンドから「ToolMenus.Edit 1」を実行すると編集モードが有効になります。無効にするときは「ToolMenus.Edit 0」を実行しましょう。
今回はメインメニューの[Tools]タブに追加してみます。編集モードで見てみると、「LevelEditor.MainMenu.Tools」に追加すれば良いことが確認できます。

EUB_MyMenuを開き、Detailsから[Menu]に場所の文字列を入力します。

EUB_ResisterMenuを右クリックし、[Run Editor Utility Blueprint]からメニュー登録処理を実行します。

メインメニューの[Tools]を開くとメニューが登録されているのが確認できます。

表示位置の変更
メニューを登録できましたが、セクションを指定しないままだと一番上のセクションに表示されてしまうため、[PROGRAMMING]セクションに表示されています。
EUB_MyMenuを開き、[Section]からセクション名を「Tools」に変更してみましょう。

すると表示位置が変わり、[TOOLS]セクションに表示されました。

さらに、EUB_MyMenuのDetailsから[Insert Position]を以下のように設定します。
- 設定項目
値
- Name
FindInBlueprints
- Position
After

すると、以下のように表示位置が[Find in Blueprints]の1つ後ろになりました。

[Insert Position]を指定すると以下のように表示位置を変更することができます。
- 設定項目
説明
- Name
挿入する項目の基準
- Position
Default: セクションの最後
Before: “Name”で指定した項目の1つ前
After: “Name”で指定した項目の1つ後
First: セクションの最初
サブメニューの作成
次に、サブメニューを作成していきます。
EUB_MyMenuと同様に「EditorUtilityToolMenuEntry」を継承したEUBを作成し、アセット名は「EUB_MySubMenu」とします。

アセットを開き、Detailsから以下のように設定します。
- 設定項目
値
- Menu
LevelEditor.MainMenu.Tools.MyMenu
- Name
MySubMenu
- Label
MySubMenu

次に「EUB_MySubMenu」を開き、[Is Sub Menu]にチェックを入れます。このチェックを入れたメニュー項目はサブメニューを持てるようになります。

最後に「EUB_ResisterMenu」でEUB_MyMenuと同じように登録処理を追加します。

実行すると以下のようにサブメニューが登録されました。
3:まとめ
今回は独自メニューのカスタマイズ方法について少し踏み込んで解説しました。
まだ解説しきれていない箇所も多く、今後の連載で解説したいと思いますので、引き続きご愛読いただけたら嬉しく思います。
本記事で作成したツールのプロジェクト一式のデータは以下からダウンロードできます。

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

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