Basic movement with AddForce option.
public class Movement : MonoBehaviour { Rigidbody rb; float speed; void Start() { rb = GetComponent<Rigidbody>(); speed = 2f; } void FixedUpdate() { if(Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0) { float movementX = Input.GetAxis("Horizontal"); float movementZ = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(movementX, 0, movementZ); rb.AddForce(movement * speed, ForceMode.VelocityChange); // Turn the object along with the driving direction if (rb.velocity != movement) { transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.LookRotation(movement), Time.deltaTime * 200f); } } } }