I’m not sure why this is. Seems like it should work, but if I call Jump with On Event Landed, nothing happens.
In end, I had to use a roundabout way to make actor auto-jump.
Anybody know why this might be?
I’m not sure why this is. Seems like it should work, but if I call Jump with On Event Landed, nothing happens.
In end, I had to use a roundabout way to make actor auto-jump.
Anybody know why this might be?
Hey Kaezon,
It looks like this is a bug. Event On Landed node is firing while Is Falling boolean for Movement Component is still set to true. I have entered a bug report in our system for our developers to look over (TTP# 347599), and I will let you know if I see an update.
In meantime, would you mind posting your work-around for this issue for any other users that might come across same problem?
Thanks for report!
As requested, this is my current workaround:
I used On Tick to call a conditional statement where character jumped if Character Movement component’s velocity on Z axis was not equal to 0.0
I’m sure there’s a way to work it with collision detection, but since it’s evaluated every tick and chances of velocity being == 0.0 in float-space any time OTHER than something setting it to 0.0 (a collision) it was a reasonable temporary solution.
Blueprint On Attached Image
Sure thing. Thanks for checking it out.
I’ve added my workaround as a comment to original post, image attached.
I’ll look in to reordering event to be after setting movement mode to walking.
In meantime I think there is a simpler workaround, which is to use the “OnMovementModeChanged” event to detect when you go from falling to walking and then trigger your jump event.
Looking at it more, I don’t think I will be reordering call. Too many existing implementations of OnLanded() assume that movement mode is falling, and that they can read current velocity as impact velocity.
I suggest using OnMovementModeChanged() event instead as I suggested. I will update documentation in OnLanded() to make it clear that this is still while Falling is set and that it’s about to change to walking. Maybe I’ll rename it “OnLanding()” to make it more clear…
Hi, thank you so much for work around, I’ve been struggling with a similar problem for a while and by adapting your solution I worked around a problem inherent with using velocity. It’s a bit complicated but I’ll do my best to explain.
With your solution using velocity I cam across problem that at apex of jump z velocity momentarily becomes 0 as pawn began to fall meaning that its possible to jump infinitely without ever landing.
To fix this I created a second character which I named JumpMeasure. JumpMeasure is identical to character but only receives Jump input and none of movement controls. As soon as game starts JumpMeasure is teleported to an enclosed area beneath level away from character.
I then told blueprint to allow character to jump only when JumpMeasures world Z co-ordinate equals almost exactly co-ordinate I teleported it to when game starts.
This is as far as I’ve gotten with this problem but it is imperfect. If player falls further than JumpMeasure they can jump again, also, if they walk off of an edge, they can still jump while falling. This isn’t an issue for me as falling velocity of player is too much for impulse from jump to make a difference but in case someone else uses this solution be aware that this could cause problems in different circumstances from my own. I’ll leave BP for jump here too.