Rotate toward movement:
if (direction.sqrMagnitude > 0.001f)
{
transform.forward = direction;
}
Smooth rotation:
Quaternion targetRotation =
Quaternion.LookRotation(direction);
transform.rotation =
Quaternion.Slerp(
transform.rotation,
targetRotation,
rotationSpeed * Time.deltaTime
);
With Rigidbody:
rb.MoveRotation(targetRotation);