Why is a Falling character's speed capped at 4000 units per second?
A pawn with a CharacterMovement controller seems to be unable to exceed 4000 (+/- imprecision) total velocity when in the Falling movement state. It's so hard capped that if you move sideways, it will actually make you fall more slowly just to maintain the same velocity magnitude. Why is this?
I'm making a very momentum-dependent game (think Quake 3 rocket jumping stunt maps) that needs to exceed this speed by quite a bit. The strange thing is that other movement modes don't have this limitation. Here's the character running very fast on a surface:
Yet even at this speed as soon as I leave the surface my character is using as a base, the velocity will snap to 4000. Even launch forces can't circumvent this limit.
Is there a good reason for this? Drag/walk speed/gravity/all other velocity-affecting settings seem to have no effect. Am I stuck hacking around this by changing the world scale? Having to dig into source to fix this would drastically increase the scope of this project and I'd really prefer to avoid it.
Update: Changing the world scale had no noticeable effect.
Update 2: I can't even find where or why this is happening in the source code. Using alternative movement modes isn't really viable since the CharacterMovement class makes a lot of assumptions about Falling actually being for falling et cetera. Re-implementing CharacterMovement in Blueprint would be an entire project unto itself.
Update 3: Nothing that I have tried has worked. Forcing the character into Flying mode with added gravity every time they leave the ground causes a host of other bugs and requires a tonne of special cases. This has absolutely blocked my project. Please help!!
The problem you're running into is because we have a default physics volume with terminal velocity of 4000. I'm not an expert on this system so I need to double check something before giving you a proper fix, but in the mean time if you have access to code you can change this in the constructor of APhysicsVolume: Engine\Source\Runtime\Engine\Private\PhysicsVolume.cpp line 13
TerminalVelocity = 4000.f; (change it to something higher)
This is not a permanent solution but I wanted to give you an answer so that you can at least keep going. I'll keep you posted on the proper solution once I find out more.
answered Apr 09 '14 at 09:57 PM
[Epic]Ori Cohen STAFF
There may be some form of Terminal Velocity mechanic inherent in the gravity mechanic that is not applicable when merely running along the ground.
If you didn't create the gravity mechanic yourself(you are using some template resources from Epic), you may want to dig into it's blueprint and see how it is handling it.
Follow this question
Once you sign in you will be able to subscribe for any updates here