(All of this is in C++)
I’ve been attempting to use the MOVE_Flying setting of the CharacterMovementComponent for my character, but the results have been… Frankly catastrophic.
First off, the braking: When moving, upon stopping to receive an input, the character will decelerate, then… stop decelerating.
So, for instance if we take the X axis of the velocity vector, we’ll reach somewhere near X=15.something, then it will just stay there… For a while.
After some time (multiple seconds, way more than it should given the braking values), it will suddenly jump to X=7.5 and stay there for a while. Then, after a very long time (up to a minute) the velocity.X will suddenly reach X=0.0.
Toying with it a bit more, I tried to change the vector directly to see if there is some kind of workaround to this issue… But this gets worse:
I tried binding a key to a custom action that, on press, substracts 3.25f to all three velocity axis. In other movement components, like for instance MOVE_Swimming, starting from a 0.0f velocity vector, you get… a -3.25f velocity vector, which is correct, since 0 - 3.25 = -3.25.
But in MOVE_Flying, substracting 3.25 on all three axis will give you that kind of result: X=-5.221 Y=-3.250 Z=-3.248
This is just crazy! Not only are there precision errors where they shouldn’t be (for a float), but the MONSTER GAP on the X axis just can’t be explained away by a mere precision error. The result on the X axis is nearly TWICE the expected substraction result! For the engine, 0 - 3.25 = -5.22, are you kidding me?? xD
So yeah, long story short, the MOVE_Flying mode for the CharacterMovementComponent is completely broken.