The problem is, when you hit the floor, your Motion.y
is not reset to 0. Whatever value it had once you hit the floor stays, and since you're subtracting the jump height from that value, the jump height will alternate between two different heights. Also, is_on_floor()
only returns true
after move_and_slide()
is called, so the first frame will apply gravity and give the movement vector a non-zero value from the start.
Change the line
Motion.y -= Jum_Height
to
Motion.y = -Jum_Height
Since you're no longer subtracting the jump height from a non-zero value, you should also reduce your jump height, or the character will jump higher than before.