お世話になっております。
> はじめに、BindAction()のTriggerEventにETriggerEvent::Startedを渡したところ、Xを押すだけでデリゲートが実行されてしまいました。
> Xを押すだけで、None -> Ongoing の状態になるようです。
以下の手順でテストを行ったところ、こちらでは再現が取れませんでしたので、ランタイムでInput Actionを生成する手順に問題があるのかもしれません。C++版Third Personテンプレートなどを利用して、簡易な再現プロジェクトをご提供いただくことは可能でしょうか。
- C++版Third Personテンプレートでプロジェクトを作成
- Input Action 「IA_Shift」をbool値で作成
- Input Mapping Context「IMC_Default」を開いて、IA_Shiftを追加して、左Shiftキーをマッピング
- JumpのスペースバーにChorded Actionを追加し、「IA_Shift」を指定
C++版Third Personテンプレートは、ETriggerState::StartedにBindActionを行っており、
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump); EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
ご報告いただいたものと同じ症状が起こるのであれば、左Shiftキーを押しただけでキャラクターがStartedを受け取ってジャンプするはずなのですが、そのような挙動は見られず、本来の仕様通りに動作するという結果となりました。
> ボタン同時押しでデリゲートを1度だけ実行させたい場合に適切な方法は何でしょうか?
本来はETriggerEvent::Startedで取れるはずですが、うまくいかないとなりますと、もう一つの方法としてXとYの両方のInputActionのトリガーに「Pressed(UInputTriggerPressedクラス)」を追加するということが考えられます。この設定を行えば、ボタン同時押し続けによるETriggerEvent::Triggeredの連続実行が防げるようになるはずです。
以上、よろしくお願いいたします。