実現したいこと
ゲームパッド等のコントローラー入力でもマウスカーソルを移動させたい。
その際に、Widgetのボタンもクリックできるようにしたい。ここでのマウスクリックは、UIボタンのクリックができることを意味します。
コントローラー入力によるマウスカーソルの移動
InputActionを用意
マウスカーソルを動かせるように、コントローラー入力用のInputActionを用意します。
InputActionは、スティック入力を受け取れるものにします。ファーストパーソンテンプレートのIA_Lookと同じような感じです。
コントローラー入力によるマウスクリック
今回行いたいことは、コントローラーでマウスカーソルを動かし、UIのボタンをクリックさせるというものです。
UINavigationプラグインの使用
[OLD] UI Navigation 2.0 in Code Plugins - UE Marketplace
こちらのプラグインを使用することで、コントローラー入力におけるUI上での決定ボタンを設定することができます。
※自分の環境では、古いバージョンのプラグインを使用しています。新しいバージョンが出ているので、そちらを使う方が良さそうです。
UI Navigation 3.0 in Code Plugins - UE Marketplace
ホバーイベントを用意
マウスカーソルの移動ができれば、Widgetにマウスカーソルが乗った時のホバーイベントを発火させることが可能になります。Buttonにホバーした際は、On Hovered
、On Unhovered
イベントでボタンがフォーカス中かどうかを知ることができます。
Set Focusを設定
ホバーのタイミングでSet Focus
させます。
コントローラーの決定ボタンを押すと、UINavigationプラグインの力で、ButtonのOn Clicked
イベントを発火させること可能になります。
Set Focus
の解除方法がわからなかったので、とりあえず親Widgetにフォーカスを当てるようにしました。
Set Focus中はキー入力で別ボタンへのフォーカスが可能になる
勝手にナビゲーションさせたくない場合は「停止」に設定できます。