ユーザー インターフェースでは、画面上のボタンに入力アクションをマッピングすることができます。たとえば、複数のタブが含まれるオプション メニューで、ゲームパッドの左と右のショルダー ボタンを使ってタブ間を移動したりすることができます。このようなインタラクションはコンテキスト依存性が高いため、CommonUI には Common Bound Action Bar (共通結合アクション バー) と呼ばれるウィジェットが含まれています。このウィジェットでは、現在有効な UI のすべての入力アクションが、参照が容易な単一の場所に表示されます。通常、このウィジェットは画面下部に配置されます。
CommonBoundActionBar / NavBar の仕組み
UCommonBoundActionBar はティック時に更新されます。最終的なバー更新は UCommonBoundActionBar::HandleDeferredDisplayUpdate 関数に実装されます。bDisplayInActionBar プロパティが true に設定されているあらゆる入力アクションが集められて並べ替えられ、表示のリストに追加されます。
この更新は UCommonUIActionRouterBase::OnBoundActionsUpdated アクション ルーター デリゲートに結合されており、CommonUI のさまざまなノード変更ポイントで発行されます。ノード変更はウィジェットが有効/無効になるごとに生じるため、利用可能なアクションの変更をトレースするうえで最適なポイントとなります。
ただし、UCommonUIActionRouterBase はローカル プレイヤー サブシステムであるため、ティックはローカル プレイヤーに依存することになります。つまり、メニューを表示するためにゲームがティックをポーズした場合、UICommonBoundActionBar はプレイヤーのティック プロセスに依存しているため、利用可能な CommonUI アクションが変更されても動的に更新しません。
すべてのアクションがアクション バーに追加されるわけではなく、またその必要もありません。入力アクションがアクション バーに追加されるかどうかは FBindUIActionArgs::bDisplayInActionBar によって判断されます。これは [Display In Action Bar (アクション バーに表示)] 設定を通じてブループリントで公開されます。C++ で UCommonUserWidget::bDisplayInActionBar を使ってアクセスすることもできます。
代替策として、アクタ、もしくはプレイヤー インタラクションまたは UI を所有するローカル プレイヤーに向けたポーズ中のティックを有効にすることもできます。また、ウィジェットのサブクラスを作成してポーズ中のティックを可能に設定することもできます。
CommonBoundActionBar を UI に実装する
共通結合アクション バーを設定するには、次のステップを実行します。
-
CommonBoundActionBar をウィジェット ブループリントに追加します。Content Examples プロジェクトでは、このウィジェットが CommonUI_ActivatableWidgetsKB の画面下部に固定されています。このウィジェットは、[ExampleContent] > [UMG] > [CommonUI] > [ActivatableWidgetsKB] にあります。
-
UCommonBoundActionButtonから派生するクラスを作成します。Content Examples プロジェクトでは、このウィジェットの名前は「NavigationBarAction」です。
-
シンプルな実装では、横方向ボックスの Common Input Action ウィジェットと Common Text Widget を使用します。Common Input Action ウィジェットにはボタン アイコンが表示され、Common Text Widget には入力アクションのフレンドリー ネームが表示されます。
-
Common Text Widget に「Text_ActionName」と名前を付けます。
UCommonBoundActionButtonでは、この特定の名前に基づいてテキスト ウィジェットを InputAction のテキストにバインドします。Common Text Widget の名前を「Text_ActionName」に変更しないと、ブループリントのコンパイルに失敗します。
-
CommonBoundActionButton を CommonBoundActionBar の [Action Button Class (アクション ボタン クラス)] に追加します。
-
CommonBoundActionBar に表示するアクションを含む、UI 内の CommonUI ウィジェットを選択して、[Display in Action Bar (アクション バーに表示)] を true (オン) に設定します。C++ ではこれが
bDisplayInActionBarで表されます。
bDisplayInActionBarは、UCommonButtonBaseのようにUCommonUserWidgetのメンバーであり、その派生クラスです。入力アクション自体と同様に、ウィジェットのベース UMG ライブラリでは利用できません。 -
表示する入力アクションを含むウィジェットが 有効 (アクティブ) であることを確認します。これは、ウィジェット自体が「アクティベート可能なウィジェット」であるか、アクティベート可能なウィジェットの子供であることを意味します。
アクティベート可能なウィジェットは、最初はデフォルトで無効 (非アクティブ) のステートになっています。UCommonUserWidget::Activate を呼び出して、これらのウィジェットを手動で有効にするか、[Auto Activate (自動アクティベート)] 設定 (UCommonActivatableWidget::bAutoActivate) を使って、ビューポートへの追加時に自己アクティベートするように設定します。
再生時には、目的のアクションを含むウィジェットがアクティベートされることを想定して、そのアクションがナビゲーション バーに表示されます。