good physics based movement
private Rigidbody rb;
void Start ()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate ()
{
float moveHorizontal = Input.GetAxis ("Horizontal");
float moveVertical = Input.GetAxis ("Vertical");
Vector3 movement = (m_Camera.transform.right*moveHorizontal + m_Camera.transform.forward*moveVertical);
rb.AddForce (movement * speed);