[Enhanced input + Touch] "end touch" is never processed

Hello,

I tried experimenting with the new enhanced input system and mobile but I came to an issue : The “end touch” event doesn’t seem to trigger anything inside the enhanced input system.
InputTriggers should technically trigger their UpdateState, and IsActuated() should returns false. But here, nothing is triggered at all during an “end touch”.

If you want to test you can just test a “Down” trigger which works perfectly, but a “Pressed” will only trigger once and will then be blocked. A “Released” trigger will never trigger at all.

Note: I’m testing it in the editor, using UseMouseForTouch.

3 Likes

I also have the same issue.
I wish you could tell me how to solve it.

same problem here.

anyone?

thanks

I have the same issue. I guess it’s a bug. I’ve tested the same functionality but with right mouse button - it works.

any word on this? It’s same for me. Broken. Right mouse button works perfectly with the triggers like “Tap” but with touch it only works once then never again

EIC->BindAction(InputActions->Mobile_Tap, ETriggerEvent::Ongoing, this, &AMyPlayerPawn::Mobile_Tap);
EIC->BindAction(InputActions->Mobile_Tap, ETriggerEvent::Triggered, this, &AMyPlayerPawn::Mobile_Tap);

...

if(Instance.GetTriggerEvent() == ETriggerEvent::Ongoing)
    GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Blue, TEXT("Tap Ongoing"));
if(Instance.GetTriggerEvent() == ETriggerEvent::Triggered)
    GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Yellow, TEXT("Tap Triggered"));

Input action for this mapping is set to Released after 0.5s. Description of Released says “Triggers ongoing while above actuation threshold”. And “Triggers only once when falls below actuation threshold.”

In testing this example only Ongoing is ever fired.

With Tap the description is “Input must be actuated then released within TapReleaseTimeThreshold to Trigger”. In practice this will trigger the first time and then never again. If i set threshold to 1 second and release before that time, I see Tap Ongoing debug message repeated. If I go over that 1 second threshold, no Triggered event is fired and then no other input for this event works. There is no further ongoing event fired.

Would be great if we could get some clarification on how to use Enhanced input for things like Tap and Release with Touch Controls. I believe there are some bugs here, or perhaps I just have some misunderstanding.

Update: After more testing it seems there is no way to get the screen position of a touch event with Released as the selected trigger. When looking at Instance.GetValue() description it states “Will be Zero if event is not ETriggerEvent::Triggered!”. Because Triggered never fires, its always zero. The only events that ever fire with Released is Started, Ongoing, and Cancelled.

Pulse will trigger multiple times if Trigger Limit is 0. However it will only ever fire once if set to 1. And then it can never be fired again. Similar to Tap.

My discord is array_1337 if you wanna chat on this. As of now I gave up on this and have reverted to using the old Get Touch Input node and rolling my own features like tap, double tap etc. I could still roll my own with Enhanced Input but I dunno what other dragons are in it re: touch : )

I’ve also just run into this same issue, found your discord thread about it as well. Did you end up filing a bug report for it? I would happily upvote it :smiley:

I can confirm having exactly the same issue on 5.1.1.

I’m seeing this on 5.3 as well

Was there a bug report submitted for this issue? Does anyone have a link?

I’m still seeing this issue and many others related to touch inputs with the EIS and 5.3.2.

The “tap” triggering only once issue is the most prevalent/obvious one.

Same problem in 5.4.2

Same here

Hey!

It sounds like you’re running into an issue with the Enhanced Input System and how it’s handling touch events, especially the “end touch” not triggering properly.
Check Input Mapping, maybe for the “Released” action (or “end touch”), make sure that the input action mapping in the -Enhanced Input System- is set up correctly for touch inputs. Double-check that the action is configured to trigger on -Input Release-.
Check Action States and try debugging by printing out the -Action State- during the touch phases. This will give you a clear idea of whether the input system is receiving the “end touch” event but failing to execute any logic.
Debug here to track why the touch end is not being detected:

cpp

if (YourInputAction->IsActuated()) { // Your touch is being detected } else { // Debug here to track why the touch end is not being detected }

Let me know…cheers