4.21前回の記事で、空のプラグインを追加してロードするまでの手順を紹介しました。今回はその続きで、UnrealEditorのメインメニューに自分のメニューを追加する手順をご紹介します。ちなみに、今回のプラグインは、主にIntroTutorialプラグインのコードを参考にしています。基本的な要素が入っているので、サンプルとしてもオススメです。1.ソースコードの編集イキナリですが本題です。ソースコードを以下のように記述していきます。FMyPlugin::OnMyToolMenu(){}上記のコードをビルドして実行して下さい。↓のように、[Window]メニューに独自のメニュー項目が追加されました。メニューを選択すると、FMyPlugin::OnMyToolMenu()が呼び出されますが、関数の中身が空っぽなので、現在は何も起こりません。ブレークポイントを置いて確かめてみて下さい。今回の内容はココまでです。続けて、ソースコードの解説を行っていきます。3項目を追加しました。UnrealEngineのソースコードはモジュール毎に分割してビルドされており、新規に追加するモジュールからは、最低限必要なモジュールのみを参照するようにします。そのため、ビルド設定用のcsファイルに、参照先のモジュール名を記述しておくことになります。モジュールで定義されています。公式のAPIリファレンスを探すと、必要なクラスがどのモジュールで定義されているのかを調べることが出来ます。あれば、このページです。ページの最下部に、↓のようにモジュール名とincludeが必要なヘッダファイル名が書かれています。includeしているヘッダファイルは、この方法で見つけることが出来ます。モジュール名を追加すると、そのモジュールのPublicフォルダへのインクルードパスが追加されます。3.メニュー拡張の登録についてざっくりと説明すると、以下のような手順でメニュー項目が登録されています。1.StartupModule()にて、レベルエディタに対して[Window]メニューが開かれる時に呼ばれるDelegateを登録します。2.[Window]メニューが開かれると、登録したDelegateを通して、OnWindowMenuExtension()が呼び出されます。この時引数で渡されたMenuBuilderが、まさに[Window]メニューを構築している最中です。3.OnWindowMenuExtension()内で、MenuBuilderに対してメニュー項目を追加します。この時、登録した項目が選択された際に呼び出されるDelegateを登録しています。4.メニュー項目が選択されると、先ほど登録したDelegateを通してOnMyToolMenu()が呼び出されます。5.モジュールが解放される際にShutdownModule()内で、レベルエディタに対して登録していたDelegateを登録解除します。これは、メニューの拡張ポイントを指定するための文字列なのですが、リファレンス等には載っていません。追加したい拡張ポイントの名前を探すには、↓の設定をONにします。Points]すると、UIの拡張可能なポイントに、その名前が表示されるようになります。緑の文字が拡張ポイントです。メインメニュー以外にも、ツールバーやビューポート上のメニューにも拡張ポイントが存在しています。先ほど登録した[MyMenu]セクションにも拡張ポイントが設定されています。今回は[Window]メニューに項目を追加したかったので、この方法で”LevelEditor”という名前が探し出せました。次回は、自作のウィンドウを作って、このメニューから呼び出す手順を紹介したいと思います。