Rotate while moving forward

I have the following code, it makes object randomly wonder on the screen. What I am having issues with, is when an object looks at the point it is going to, I would like it to rotate as it moves forward. What is happening now, is it rotates instantly to the point it is going towards. So, how can I get it to rotate slowly and move forward at the same time?

using UnityEngine;
using System.Collections;

public class Wonder : MonoBehaviour {

	protected Vector2 wayPoint;
	protected float speed;

	// Use this for initialization
	void Start () {
		speed = gameObject.GetComponent<Move>().playerSpeed;
		wonder();
	}

	void wonder(){
		wayPoint = Random.insideUnitCircle * 10;
	}
	
	// Update is called once per frame
	void Update () {
		Vector2 dir = wayPoint - new Vector2(transform.position.x, transform.position.y);
		float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
		transform.rotation = Quaternion.Euler(new Vector3(0, 0,Mathf.Atan2 (dir.y, dir.x) * Mathf.Rad2Deg - 90));
		transform.position = Vector2.MoveTowards(transform.position, wayPoint, Time.deltaTime * speed);
		float magnitude = (new Vector2(transform.position.x, transform.position.y) - wayPoint).magnitude;
		if(magnitude < 3){
			wonder();
		}
	}
}

Here is an example:

30328-shiprotation2.jpg

So, once the ship gets to its point another will be created and it will move there. I am thinking I will have to have a list of 5+ points, then calculate the arch the ship needs to take adding new points as the ship hits a way point then removing old ones after. I am not sure how to do this though…

This changes Update() will rotate over time. I don’t know what the -90 is all about. I’d remove it and fix the texture direction on the sprite in Photoshop. You’ll need to declare and initialize the ‘rotateSpeed’ variable.

void Update () {
    Vector2 dir = wayPoint - new Vector2(transform.position.x, transform.position.y);
    float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90.0f;
    Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
    transform.rotation = Quaternion.RotateTowards(transform.rotation, q, Time.deltaTime * rotateSpeed);
    transform.position = Vector2.MoveTowards(transform.position, wayPoint, Time.deltaTime * speed);
    float magnitude = (new Vector2(transform.position.x, transform.position.y) - wayPoint).magnitude;
    if(magnitude < 3){
        wonder();
    }
}