こんにちは
ブログを参考に以下の方法で大雑把に作成したところ、うまくいきました。
ブログの通り、ActorクラスのデフォルトにあるBlockInputのチェックをいれます。
続いて、UMGのクラスにイベントディスパッチャーを追加して、以下のように実装しました。
最後にBeginOverlapのウィジェット作成以降を以下のように組みました。
ただ上記だと「UMGがオーバーラップに入るたびに作成して表示する」という状態になっているので非常によろしくない解決方法ではありますが、おそらくブログをみて検証をしていると思われるので、一旦これで回答させていただきます。
原理としては、ブログ先に書かれている通り、
通常のキャラクター操作を止めるために、メッセージ表示用アクターにInput関連の主導権を持たせるように設定
BlockInputを使って全イベントを遮断
押してたキーから指をはなしたっていう情報がUE4に上手く伝わってない気配がある。
UIOnlyじゃなくて、SetInputModeGameAndUIを使うようにした
が目的のため、
1.キャラクター操作を止めるために、別のActorにInputイベント関連の主導を持たせる
2.他のアクター(Charactorクラス、Pawnクラス等)にInputイベントが実行されないように、1のActorでInputイベントを遮断して止める
3.Set Input UI OnlyでUIのみの入力受付にしても、内部的には止めた時点でのInputAxisがボタンから指を離しても0にならないまま値を持ち続けてしまうため、SetInputModeGameAndUIでInputAxisの値を更新できるようにする。
4.Inputイベントがまず主導権を握っている1のActorに来るため、ActorがInputAxisを受け取っていてもBlock Inputが有効になっている以上、他のActorにInputイベントが行かない(そのため操作キャラクターが動かなくなる)
というのをやっているのかな、と思います。(間違ってたらスミマセン!)
何か疑問があれば、わかる範囲でお答えいたします。