# How to move object repeatedly with Vector3.MoveTowards

So now i have a boat out of the camera and i want to implement this scenario :

1- When start game, waiting for 5 seconds then move the boat from position A to position B.
2- When boat reach position B the boat will get back to position A instantly.

3- Then wait for 5 seconds again and repeat 1 and 2 steps

And so on …

This is my code but the problem that when start the game, the boat starting move without waiting seconds and once it reach to position B it get moved again and also increase its speed.

``````// Use this for initialization
void Start () {
startPos = transform.position;
moveBoats = MoveBoats ();

}

// Update is called once per frame
void Update () {
StartCoroutine (moveBoats);
if (transform.position.x == boatEndPoint.transform.position.x) {
transform.position = startPos;
}
}

IEnumerator MoveBoats ()
{
while (true) {
yield return new WaitForSeconds (5.0f);
transform.position = Vector3.MoveTowards (transform.position, boatEndPoint.transform.position, speed * Time.deltaTime);
}
}
``````

How can i fix that ??

in the Start method just pass the points a and b and and time to move.Lets suppose you want to move from point a to point b within 5 seconds then `yield return StartCoroutine(MoveObject(transform, pointA, PointB, 5.0f));`

``````public Vector3 PointB;

IEnumerator Start()
{
var pointA = transform.position;
while (true)
{
yield return StartCoroutine(MoveObject(transform, pointA, PointB, 3.0f));
yield return StartCoroutine(MoveObject(transform, PointB, pointA, 3.0f));
}
}

IEnumerator MoveObject(Transform thisTransform, Vector3 startPos, Vector3 endPos, float time)
{
yield return new WaitForSeconds(5f);// first yield return after five seconds as you want
var i = 0.0f;
var rate = 1.0f / time;
while (i < 1.0f)
{
i += Time.deltaTime * rate;
thisTransform.position = Vector3.Lerp(startPos, endPos, i);
yield return null;
}
}
``````

Arrange time when your boat come and at which speed.

you can also use MoveTowards Scripting API to move.