お世話になります。
マウスカーソルを合わせたウィジェットをクリックした判定を取得しようとしたところ以下の問題が発生いたしました。
まずActionMappingsに「Decision」アクションを追加しマウスの左クリックを登録しIE_Pressedでバインドします。
次にUUserWidgetの派生クラスを親クラスとしたウィジェットを作成しそのウィジェットにマウスカーソルを合わせるとNativeOnMouseEnter関数がマウスカーソルが離れるとNativeOnMouseLeave関数がそれぞれ呼ばれることを確認しました。
再びウィジェットにマウスカーソルを合わせた状態で左クリックをしたところクリックした瞬間NativeOnMouseLeave関数が呼ばれ離した瞬間にNativeOnMouseEnter関数呼ばれました。
クリック中であってもマウスカーソルが合わさっている間は上記二つの関数が呼ばれてほしくありません。
そこで「Project Settings → Engine → Input」の「Default Viewport Mouse Capture Mode」を「Capture Permanently Including Initial Mouse Down」から「No Capture」に変更しました。
するとウィジェットにマウスカーソルを合わせた状態で左クリックをしても上記二つの関数が呼ばれなくなりました。
しかし、IE_Pressedでバインドしていた「Decision」アクションがダブルクリックでしか押した瞬間を判定することができなくなりました。
ウィジェットにマウスカーソルを合わせた状態でのクリックで上記二つの関数が呼ばれず、シングルクリックで押した瞬間を判定するにはどのようにすればよろしいでしょうか。
「Default Viewport Mouse Capture Mode」を「Capture During Right Mouse Down」にすることで左クリックでは問題なく動作しましたが右クリックで最初の問題が発生してしまいます。
お手数おかけしますが、よろしくお願いいたします。
お世話になっております。
連休を挟みご返答が遅くなってしまい申し訳ございません。
「Default Viewport Mouse Capture Mode」を「Capture Permanently Including Initial Mouse Down」から「No Capture」に変更しました。
UWidgetBlueprintLibrary::SetInputModeGameAndUIを実行しておくことで「Decision」アクションも呼ばれると思われますので一度ご確認頂けますと幸いです。
よろしくお願いします。
ご確認、ご回答ありがとうございます。
UWidgetBlueprintLibrary::SetInputModeGameAndUI関数を実行することでたしかに「Decision」アクションが呼ばれるようになりましたが以下の問題が再び浮上してしまいます。
再びウィジェットにマウスカーソルを合わせた状態で左クリックをしたところクリックした瞬間NativeOnMouseLeave関数が呼ばれ離した瞬間にNativeOnMouseEnter関数呼ばれました。 クリック中であってもマウスカーソルが合わさっている間は上記二つの関数が呼ばれてほしくありません。
「Decision」アクションが適切に呼ばれマウスカーソルをウィジェットに合わせた状態でクリックをしてもNativeOnMouseLeave関数及びNativeOnMouseEnter関数が呼ばれない状態にするにはどのような対応をすればよろしいでしょうか。
お手数おかけしますが、よろしくお願いいたします。
すいません、WidgetではなくButtonをクリックした際の挙動として上記を確認しておりました。Widgetの挙動を見る限り、全ての条件を完全に満たすことは単純な設定だけでは現状難しいと思われます。おそらくマウスのクリック時にLeave/Enterを補足せずにクリックだけを取得するのはエンジンのカスタマイズが必要に思われるため、例えばFSlateApplication::ProcessMouseButtonDownEventを検知した場合に独自のイベントでWidgetへ通知するようなことを行うことで実現できるように思われます。
ご回答ありがとうございます。
お知らせいただいた方法をもとにエンジンのカスタマイズを検討させていただきます。
今後ともよろしくお願いいたします。