I just started UE but might be able to help a little bit.
I’ve played with LaunchedCharacter
and what it basically does is (assuming no XYZ overrides):
- Add velocity vector to your character
- Set player movement mode to Falling
What this mean is that, say you launch your character on X at a speed of 5000cm/s, and your character is currently standing still. And we have the default braking deceleration while falling of 0 (you don’t loose your X momentum while in the air).
Note: I cannot yet explain exactly why&when the falling states switches from Falling
to Walking
, I just know it doesn’t happen directly and takes couple frames to kick in.
Not accurate but gives an idea of what happen each frame, all happening at consistent 120fps:
- 5000/120 = 41.66cm distance covered – Falling
- 5000/120 = 41.66cm distance covered – Still falling, so initial speed is unchanged
- Still falling add another 41.66cm
…few more of these…
- Mode switch to Walking, you start decelerating automatically due to ground friction and because you are above you max speed.
let’s say 3800/120 = 31.66 cm distance covered
- 22 cm
etc until complete stop - which doesn’t take long
Note that summing all of these value will not be equal to 50m distance covered - whether you start grounded or not, we are only telling the engine “Hey, this guy now has + 50m/s move speed on X”
Now you said that something was off when dashing off platforms. I guess by that you meant you are flung forward way more than expected.
If we consider the above example, dashing from a platform ledge would mean you start from Falling
mode (since that’s what launch character does automatically, regardless of your character actually touching the ground), as soon as you leave the platform, you will again be in Falling
movement mode, where friction is null / no deceleration. So you will keep this momentum until gravity brings you to the ground —> more distance covered.
Few things you can look at on your character movement component and play around with to have a feel of how it affect physx:
- Air control
- Braking Deceleration for all movement mode
- Ground Firction
- Falling Lateral Friction
- Braking Friction Factor
- Max Walk Speed
- Gravity Scale
Anyhow, as you can see LaunchCharacter depends on many variables.
So if you have to have tight and predictable movement in your game, such as “I want to move exactly X units when dashing”, you would have to make sure that all of them have the correct values when ticking depending on the current context of your character. Which I’m sure could become quickly messy if not well understood (not that I understand it very well yet)
Your approach with SetActorLocation
sounds better suited for a precise dash as physx aren’t involved in this case.
As for the teleport method… I have no idea based on this blueprint alone, seems correct.
Some ideas though:
- double check other things that could move you character on the Z axis (root motion or any other mechanics that could trigger automatically)
- good way to identify if the issue is within this teleport mechanic would be to setup a new character on a fresh project, with just this mechanic in place, and see if the character moves correctly - if it does, this BP code is fine and the problem lies somewhere else.
I remember there’s also a AddActorLocalOffset
, could be handy 
hope that helps.