If a character stands on an actor and Set Actor Location is run on that actor the character teleports too … I don’t want it to. Can this be avoided?
It shouldnt, can you show your blueprints?
It’s pretty basic
And the result
This was done in a new project in ue5 but the same occurs in ue4.26
The same occurs in 4.xx. I remember trying to get to the bottom of this and if I recall correctly even if you disable collision, the character movement component will still be taken for a ride.
Would like someone explained how to modify the component so it stops doing that. If it’s not the component that is to blame, who is?
Weird how i have never ran into this before, im tired so this may not be the best method but it works. and is fairly minimal Remember to set the collision back to enabled though
You were right it still pulled the character movement if i didn’t add that delay, if i ever figure out how to alter the component itself to fix it ill let you know.
I literally was about to write to enable/disable collision. Lol
You can use a Select node and toggle on/off before/after the setActorLocation. Don’t think the delays will make a difference.
Disabling collision has no effect without an additional delay. Tried this by disabling collision on the actor entirely and by disabling collision on the specific mesh the character is colliding with.
The delay is just there to give me a couple seconds to jump onto the object before it teleports. With the code above, the object and the character teleport then the character falls through the cube.
If I add an additional delay between the disable collision and set actor location it “works” but this is a poor solution as it is prone to timing issues (especially when network play is taken into effect)
Interesting… I’ll try it later and update.
It is done by CharacterMovementComponents
's UpdateBasedMovement
. It’s virtual
, so you can just override it (or MaybeUpdateBasedMovement
) and do your own logic / conditions.
AFAIK there’s no proper way to do it purely in blueprints (but I might be wrong).
Turns out adding a delay with 0 duration after changing collision is the only “fix” I can find.
Seems like mine and pezzotti’s solution is the only way in blueprints we found so far, otherwise you will need to do it in c++ like KristofMorva said. Plus a delay of ‘0’ shouldn’t effect multiplayer to bad.
Bumping to say this is still an issue in 5.3. Super bummed about it since the Delay workaround isn’t an option if you’re using SetActorLocation within a Component like I am. Would kill to know if other workarounds have been found.
*Edit:
Workaround: I was able to use a Timer with a .00001 Time value as a workaround within an ActorComponent, similar to those above using Delay nodes.