Best way to move a character in a 2d platformer?

transform.translate causes a steady movement but causes the player to jitter.

rigidbody2D.velocity=Vector3.right* -4; makes the character move steady but makes gravity work weird. If you are running then try to jump, it barely works. But if you jump then move, you can glide for a long distance

rigidbody2D.AddForce (Vector3.right * 4.5f); starts off really slow but within a few seconds is moving too fast too control.

What is a good way to get my character to move properly without the negative effects of the three examples that I mentioned? If more info is needed, I will try to provide it.

Plus if I use transform.translate, setting timeScale to 0 doesn’t work right. As anything using transform.translate still moves.

Oh I think I have an idea, I just don’t know how I would do it. Can I set a limit/maximum to the force applied if I used the addforce method?

transform.translate does not cause jitter, the jitter is caused by what and how you are feeding the method. All 3 of these are fine, it just depends on what kind of controls you wish to accomplish. velocity is the easiest and most direct way to control your character while still respecting collisions and physics, the problems you are running into with gravity is just due to how you are applying it.

For instance, cushion your moving velocity in a “isGrounded” bool. That way you control the velocity while running but let physics take over once you jump.

run, velocity is in control, hit jump, isGrounded = false, physics takes over and controls the character till isGrounded is true again.

But just do this tutorial and you will get the idea.