TopDownを利用したプロジェクトでポーズ機能をテストしてみました。
1.Project Setting > Input > Use Mouse for Touchをfalseに設定
2.ボタンを一つだけ配置したWidgetを作成
3.ボタンクリックイベントでポーズ解除のBPを作成
4.StaticMeshActorにBoxCollisionを追加して以下のBPを作成
5.StaticMeshActorをLevelに配置
これでStaticMeshActorにぶつかるとWidgetが表示されます。
問題はゲームを再開した後でマウスのクリック操作がおかしくなる事です。
・Widgetを消した瞬間、クリックをしていないのにプレイヤーがずっとマウスポインタを追尾します。
・クリックすると止まりますが、その後はクリックしても反応しません。
・クリックではなく、ダブルクリックで作動します。
BPのSet Input Mode を削除すると問題なく動作するので、原因としてはそこだというのは分かっているのですが、UI Only から Game Onlyに切り替える時に何か間違っているのでしょうか?
また、Use Mouse for TouchをTrueにしても正常に動作します。
Set Input Modeを削除すれば良いだけなのですが、この挙動がどうにも気持ち悪いのでどなたか原因が分かれば教えてください。
どうも Set Input Mode Game Only
の挙動が問題になっているようです
そこまで詳しく分析できていませんが、InputModeごとにマウス入力の扱いが微妙に異なるようです
https://forums.unrealengine.com/development-discussion/blueprint-visual-scripting/92253-does-set-input-mode-game-only-means-umg-control-won-t-handle-mouse-click?p=811989#post811989
実際に起きている動作としては、マウスのButtonDownイベントがダブルクリック時にしか起きなくなっているように見えます
この部分に関しては不具合かもしれませんが、実装を調査してみないとわかりません
Use Mouse for Touch
をTrueにした場合に動作する理由としては、Touchイベントはマウスイベントとは別に設定されており、上記オプションをTrueにした場合Touchイベントからも動作できるためでしょう
この部分は Content/TopDownBP/Blueprints/TopDownController
を参照すると良いです
なお、 Set Input Mode Game and UI
の方を使用すれば、問題の挙動が起きないことを確認できました
特に支障がなければ、こちらのノードを使用すると良いかと思います
回答ありがとうございます。確かにSet Input Mode Game and UIで問題なさそうなのでそちらを利用してみようと思います。
理由は明確に分かりませんが、マウスを押下し続けたままSet Input Mode~を実行すると不具合の原因になり得そう、な感じはしますね…気を付けます。