For the list of key identifiers see Conventional Game Input.When dealing with input it is recommended to use Input.GetAxis and Input.GetButton instead since it allows end-users to configure the keys. It will not return true until the user has released the key and pressed it again. So the code creates a movement vector that is your horizontal movement (user input), vertical movement (the vertical movement the rigidbody already has), and then lerp the current velocity to it.

By modifying velocity directly, it ensures your movement will stay smooth and … You need to call this function from the Update function, since the state gets reset each frame.