このページは4.7.5を対象としています。
このページでは上の動画のようなウィンドウを開くだけの機能を持ったメニューバーをUMGで作成する方法についてまとめます。 ウィンドウの作り方についてはこのページでまとめており、 これにメニューバーを追加するので、こちらを先にご覧ください。 Win32 APIのメニューバーを参考にしていますが、ウィンドウを開くだけの機能に簡略化しています。 また、メニューバーの各部分の名称は次の通りにしました。
メニューバー全体をMenu Widgetブループリント、 その中の一つのポップアップをPopup Widgetブループリント(これは複数のMenuitemを含む)、 さらにその中の一つの項目をMenuitem Widgetブループリントとしました。
おおまかな処理の流れは次の通りです。
まず、Menuの見た目と処理を作ります。 デザイナーで次のようにルートにHorizontalBox(IsVariable)を1つ配置します。
グラフで次のようにMainUMGオブジェクトリファレンス型で編集可能のParentUMGという変数を追加します。
グラフで次のようにAddPopupとSetFront関数を追加します。
次に、Popupの見た目と処理を作ります。 デザイナーで次のように配置します。
VerticalBox Button_PopupButton(IsVariable、Sizeで自動、HorizontalAlignment、VerticalAlignmentでそれぞれフィルを指定、OnClickedでバインド) TextBlock_0(IsVariable、HorizontalAlignment、VerticalAlignmentでそれぞれCentorを指定、Textにバインド) VerticalBox_MenuitemList(IsVariable、Sizeでフィル、HorizontalAlignment、VerticalAlignmentでそれぞれフィルを指定、VisibilityでHiddenを指定)
グラフで次のように、 文字列型で編集可能のcaption、 Menuオブジェクトリファレンス型で編集可能のParentUMG、 という変数を追加します。
グラフで次のようにAddMenuitemとGetText_0関数、及びEventGraphで処理を追加します。
次に、Menuitemの見た目と処理を作ります。 デザイナーで次のように配置します。
Button_0(IsVariable、OnClickedでバインド) TextBlock_0(IsVariable、HorizontalAlignment、VerticalAlignmentでそれぞれCentorを指定、Textにバインド)
グラフで次のように、 文字列型で編集可能のcaption、 Widgetオブジェクトリファレンス型で編集可能のParentWidget、 Windowオブジェクトリファレンス型で編集可能のWindow、 という変数を追加します。
グラフで次のようにGetText_0関数、及びEventGraphで処理を追加します。
MenuはMainUMGのデザイナーで次のように配置して使います。 ポップアップメニューを開いた高さも考慮し少し高めの高さにしましょう。
EventGraphで次のようにMenuの初期化が必要です。
これで完成です。