概要
ActivatableWidgetを使ってボタンの入力を管理して、ゲーム側の入力を止めたりUIも一緒に動かしたりできます。
ActivatableWidgetの設定は多く、ゲーム側とUI側で依存せず使うにはどういう設計がいいのかを考えてみたので一案として書き記します。
入力操作は頻繁に変わる
手触りがよくない、デファクトスタンダートな操作ではなかった、開発が進むにつれてボタン組み合わせが押しにくくなったなど色々事情があります。
開発終盤まで揉めるでしょう。
どちらかの都合でゲーム側がUIの操作を変えたりUIがゲームの操作変えたりと変更を依頼し合うような事態を避けて、お互いに独立して入力を管理したいです。
ウィジェット構成
入力を取りたいものはActivatableWidgetを使います。
WBP_UI_Input
ゲームの操作を止めずにUI側の入力を取りたいので、InputModeをAllにしたウィジェットを一つ作成します。
このウィジェット内にCommonButtonを配置してInputActionTriggerを指定します。
ボタンのクリックイベントに押した結果何のUIを表示するかの処理を実装します。
ボタン以外のデザインに関するようなものは何も入れません。
このボタンを画面に見せるかどうかはデザインによります。
ここでは隠しておく操作として画面外になるようにPaddingを指定します。


GetDesiredInputConfigはInputModeをAll

ゲーム側はEnhancedInputActionなどで入力実装を行い、UIはWBP_UI_Inputのボタンウィジェットが入力を担当するのでUI担当者で調整が可能です。
ゲーム側の操作を止めたいメニュー系
ゲーム側の操作を止めたいメニュー系については InputMode Menuを指定して作成します。
IgnoreMoveInput,IgnoreLookInputもチェックをしておくと安心です。

ゲーム側の操作を止めないHUD系
InputMode AllかInputMode Gameで作成します。
UI側が入力を取りたいならAll、表示して一定時間で消えるなどならGameもしくは単なるUserWidgetで作成します。
ホールドしてる間だけ表示する系
InputActionTriggerではホールド中だけということはできないので、ゲーム側に依頼するか独自に実装を行う必要があります。
EnhancedInputActionをCommonUIで使う拡張もあるので、こちらを使うといいかもしれません。
所感
UIを開く入力担当するゲームを止めないWBPと、その後開いたメニューはメニュー内で入力担当するという役割分担でゲーム側と独立して実装を進められるのではと思います。
とはいえ、ゲーム側のアクション入力とUI開く入力が被る事故は発生するので全体としての入力操作管理は引き続き行うことには変わりません。
意味合いの異なるボタンの使い方になってしまうこともあるので連絡はしっかりしつつ、実装では独立して行えると開発速度が上がっていくのではないでしょうか。
