How do I rotate my character smoothly?

Right now my script tells the character to walk in the direction that is right clicked, but when I click the model is turned instantly, how can I get a tiny turning animation to make it smoother? Here’s my script:

using UnityEngine;
using System.Collections;

public class MouseMovement : MonoBehaviour
{
	
	public int movementSmoothing;
	public float speed = 350f;
	public AnimationClip walk, idle;
	Vector3 targetPosition;

	void Start()
	{
		targetPosition = transform.position;
	}
	
	void Update()
	{
		if (Input.GetMouseButtonDown(1))
		{

			movementSmoothing = 90;
			Plane playerPlane = new Plane(Vector3.up, transform.position);
			Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
			float hitDist = 0.0f;
			animation.Play (walk.name);
			
			if (playerPlane.Raycast(ray, out hitDist))
			{

				var targetPoint = ray.GetPoint(hitDist);
				targetPosition = targetPoint;
				Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
				transform.rotation = targetRotation;
			}
		}
		
		Vector3 direction = targetPosition - transform.position;
		float distance = direction.magnitude;
		float step = speed * Time.deltaTime;

		if (distance > step)
		{
			transform.position += direction.normalized * step;
		}
		else
		{
			animation.Play (idle.name);
			transform.position = targetPosition;
		}
	}
}

Change this:

Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
transform.rotation = targetRotation;

To this:

Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
float turnSpeed = 2; //or whatever
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * turnSpeed);

You might need to play with your code structure depending on your behaviour, like if you only want to start moving after you’ve turned, but this should get you started.

Note that you can also do the following instead of your if (distance > step) code:

transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * speed);