While I'm not sure, my guess on what is happening is that your velocity is pointing to the upper left corner, rather than two velocities (one up and one left). In this case, because the velocities are combined, the amount of force hitting the StaticBody2D is lost via the move_and_collide
function, leaving less than half of the expected velocity in the direction that does not collide (if that makes sense).
To fix this, I would call move_and_collide
separately for each axis you want to move in. For example (untested):
# I will assume the velocity is stored in a variable called velocity
if (velocity.x != 0):
# Only move on the X-axis
move_and_collide(velocity * Vector2(1, 0), Vector2.UP)
if (velocity.y != 0):
# Only move on the Y-axis
move_and_collide(velocity * Vector2(0, 1), Vector2.UP
Then because the movement is separated per axis, collision on one axis should not affect the other, giving the desired results.