Cube seems to bug a little

I’m currently in the process of remaking Stack and I can currently create a cube, make it move, and let it stop moving on creation of another cube.

However when a cube is created it seems to glitch a little, I think it has something to do with the starting position I set but I’m not sure, and I can’t figure it out.

When a cube is created it seems to go to the starting position for a 1000th of a second and then starts moving at another spot and then everything is fine.

Here’s the code to create the cube:

using UnityEngine;
using System.Collections.Generic;

public class cubeCreator : MonoBehaviour {

	float height = 0;

	Vector3 positionLeft = new Vector3(0, 0.1f, 0.4f);
	//Vector3 positionRight = new Vector3(1f, 0.1f, 0);
	Vector3 position;

	List<GameObject> cubes = new List<GameObject>();

	// Use this for initialization
	void Start () {
		
	} 

	// Update is called once per frame
	void Update () {
		if (Input.GetKeyDown("space")) {
			//create cube, little bit higher every time
			GameObject cube = createCube (height);
			//make the cube move
			cube.AddComponent<MoveCube> ();
			//add cube to list
			cubes.Add (cube);
			if (cubes.Count > 1) {
				//stop moving
				cubes [cubes.Count - 2].GetComponent<MoveCube> ().enabled = false;
			}
			height += 0.1f;
			//left = -left;
		}
	}

	//Creates cube with random color
	GameObject createCube(float y){
		//create values for random color
		float randomR = Random.Range(0f,1f);
		float randomG = Random.Range(0f,1f);
		float randomB = Random.Range(0f,1f);

		//create cube
		GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
		cube.transform.position = positionLeft + new Vector3(0, y, 0);
		//set scale
		cube.transform.localScale = new Vector3(0.6f, 0.1f, 0.6f);
		//set color
		cube.GetComponent<Renderer>().material.color = new Color(randomR,randomG,randomB);

		return cube;

	}
}

And the code to make it move:

using UnityEngine;
using System.Collections;

public class MoveCube : MonoBehaviour {

	private float fromX;
	private float fromY;
	private float fromZ;

	private Vector3 from;
	private Vector3 to;

	private float secondsForOneLength = 1f;

	// Use this for initialization
	void Start () {
		fromY = transform.position.y;
		fromX = transform.position.x;
		fromZ = transform.position.z;


		from = new Vector3(fromX, fromY, fromZ );
		//to end position; Z-axis = top-left to bottom-right, X-axis = top-right to bottom-left
		to = new Vector3(fromX, fromY, fromZ - 1f );
	}
	
	// Update is called once per frame
	void Update () {
		transform.position = Vector3.Lerp(from, to, Mathf.SmoothStep(0f,1f, Mathf.PingPong(Time.time/secondsForOneLength, 1f)));
	}
}

Help would be greatly appreciated, and any general remarks on my code is also welcome!

Thanks in advance

Fixed it by following another example in this thread and adding a bool to stop the coroutine instantly without it finishing and then stopping

Here is the code I ended up with (credits to MR_Reptile):

Movecube:

using UnityEngine;
using System.Collections;

public class MoveCube2 : MonoBehaviour {

	public Vector3 pointB;
	public bool coroutine = true;

	IEnumerator Start()
	{
		var pointA = transform.position;
		pointB = new Vector3 (pointA.x, pointA.y, pointA.z - 1f);
		while(true)
		{
			yield return StartCoroutine(MoveObject(transform, pointA, pointB, 1.0f));
			yield return StartCoroutine(MoveObject(transform, pointB, pointA, 1.0f));
		}
	}

	IEnumerator MoveObject(Transform thisTransform, Vector3 startPos, Vector3 endPos, float time)
	{
		var i= 0.0f;
		var rate= 1.0f/time;
		while(i < 1.0f)
		{
			if (coroutine == false) {
				yield break;
			}
			i += Time.deltaTime * rate;
			thisTransform.position = Vector3.Lerp(startPos, endPos, i);
			yield return null;
		}
	}
}

And I modified the update function with

MoveCube2 cubeStop = cubes [cubes.Count - 2].GetComponent<MoveCube2> ();
				cubeStop.coroutine = false;

to end up with

using UnityEngine;
using System.Collections.Generic;

public class cubeCreator : MonoBehaviour {

	float height = 0;

	Vector3 positionLeft = new Vector3(0, 0.1f, 0.4f);
	//Vector3 positionRight = new Vector3(1f, 0.1f, 0);
	Vector3 position;

	List<GameObject> cubes = new List<GameObject>();

	// Use this for initialization
	void Start () {
		
	} 

	// Update is called once per frame
	void Update () {
		if (Input.GetKeyDown("space")) {
			//create cube, little bit higher every time
			GameObject cube = createCube (height);
			//make the cube move - kan verplaatst worden in create cube function

			//add cube to list
			cubes.Add (cube);
			if (cubes.Count > 1) {
				//stop moving
				MoveCube2 cubeStop = cubes [cubes.Count - 2].GetComponent<MoveCube2> ();
				cubeStop.coroutine = false;
			}
			height += 0.1f;
			//left = -left;
		}
	}

	//Creates cube with random color
	GameObject createCube(float y){
		//create values for random color
		float randomR = Random.Range(0f,1f);
		float randomG = Random.Range(0f,1f);
		float randomB = Random.Range(0f,1f);

		//create cube
		GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
		cube.AddComponent<MoveCube2> ();
		cube.transform.position = positionLeft + new Vector3(0, y, 0);
		//set scale
		cube.transform.localScale = new Vector3(0.6f, 0.1f, 0.6f);
		//set color
		cube.GetComponent<Renderer>().material.color = new Color(randomR,randomG,randomB);

		return cube;

	}
}