ウィジェットをキーボードだけで操作する

ウィジェットブループリントを使う | それとこれとあれかどれかと (andandor.com) の続きですが、動作確認のために前回の状況から少し触っております。前回と同じ状態に戻したと思いますが、細部が異なっている可能性があります。

ボタンにフォーカスする

ボタンをキーボードで選択するにはボタンにフォーカスするという処理が必要となります。PlayerControllerからピンを伸ばし、SetUserFocusをイベントPreConstructにつなげましょう。さらに、変数StartButtonをターゲットにつなげます。これによりStartButtonにフォーカスが当たることになります。ただこのままでは、フォーカスが当たっているかどうかの判断がしづらいので、フォーカスが当たっている場合にマウスがhoverしているような表現にできるように、あらかじめボタンStyleの値を保存しておきましょう。変数に昇格ボタンを押すことによりその要素を変数に昇格することができます。わかりにくいのでついでに名前を変えておきましょう。

イベントPreConstructは以下のようになりました。

フォーカスをわかりやすく

フォーカスされているかどうかわかりやすくする処理を実装していきます。あまり筆者自身の好みではありませんが、簡単に実装するために今回は、イベントTickで実装していきます。GetPlayerControllerからピンを伸ばし、HasUserFocusにつなげます。さらにHasUserFocusから伸ばしたピンでブランチにつなげましょう。Conditionの値によってTrueかFalseに分岐することになります。ここでは、PlayerコントローラーがStartButtonにフォーカスしているかどうかによって分岐する処理となっております。

あらかじめ保存しておいたButtonStyleを呼び出しましょう。ButtonStyleは、複数の値の塊なので分割可能です。分割してみましょう。このように分割したノードを用いて、Tick関数を組んでいきます。

今回組んだTickは以下のようになっております。フォーカスされている場合にはNormalの状態のボタンスタイルを無理やり、Hover状態と同じ状態にするという処理を入れております。またフォーカスされていない場合には、最初に保存した値と同じように戻すという処理を行っております。前半部分の処理と後半部分の処理は、ボタンの種類の違いだけで同じ処理なので、慣れてきたらfor文を用いて何とかしたほうがいいですが、とりあえず簡単に実装することを考えればこの形で十分だと思います。

フォーカスが外れるのを防ぐ

違う場所をクリックしたりした場合に、フォーカスが外れるのを防ぐ処理を入れておきましょう。関数のオーバーライドの中にOnRemovedFromFocusPathがあるはずなので、そこに実装いたします。処理自体は、PreConstructで実装していたものとほとんど同じになっております。この処理を実行中は、ボタンにフォーカスが常に当たり続けるので、UnrealEngineエディター上のメニューが開けなくなるかもしれません。停止ボタンが押せなくなったりした場合にはESCキーで処理を終了させることができます。

これでとりあえずキーボード操作の処理の実装は完了です。ここから追加でキーボード操作に関してこだわる場合のヒントに関して簡単に紹介いたします。

ナビゲーション

ボタンの詳細の下のほうにナビゲーションという項目が存在します。このナビゲーションでは、フォーカスが当たっている状態でキー入力した場合に、特定のボタンにフォーカスを当てたり関数を実行させたりできます。ここから実行する関数で、フォーカス先を制御したり、ボタンスタイルを変更したりするのもウィジェットをキーボードで操作する場合の一つの実装方法です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA