I did find a quick band-aid solution, it’s not perfect (the jumps cover less distance and feel less natural when I do it this way) but it works for now. I made my Falling and Jumping Tick methods look like this.
public override void Tick(float deltaTime)
{
Vector3 movement = CalculateMovement();
Move(movement * stateMachine.FreeLookMovementSpeed, deltaTime);
momentum = ApplyInputToMomentum(momentum, deltaTime);
if(movement.magnitude > 0.05f)
{
FaceMovementDirection(movement, deltaTime);
}
if(stateMachine.Controller.velocity.y <= 0)
{
stateMachine.SwitchState(new PlayerFallingState(stateMachine));
return;
}
}
If I could accomplish this but by using momentum in my Move (momentum, deltaTime); that would be perfect.
Update:
I added Vector3 momentum = CalculateAirMovement();
to my Tick as to try and make use of the momentum = ApplyInputToMomentum(momentum, deltaTime);
Things seem to flow better but it’s hard to tell at the moment.