IEnumerator Function

So I am currently using the IEnumerator function to pause a for loop, the for loop that contains a ball that should move to another game object. Currently from my print statements seems like the ball moves a little, but it’s actually never reaching the object and I’m not sure why since I actually have never used IEnumerator so I’m not sure if this is apart of the issue.

public IEnumerator CoUpdate(){ 
		float waitTime = 8;
	
		yield return new WaitForSeconds (waitTime);

			for (int i = 0; i <= 19; i++) {
				//Finding Game Objects
				numbers = GameObject.FindGameObjectsWithTag ("num");
				ball = GameObject.FindGameObjectWithTag ("ball");
				float step = speed * Time.deltaTime * 2;

				//Picking the random cube
				index = Random.Range (0, numbers.Length);
				pickedNumber = numbers [index];
			
				print ("number picked");
				print (pickedNumber.name);
			
				print ("numer postion");
				print (pickedNumber.transform.position);
			
				//Moving ball to cube
				target = pickedNumber.transform;
				ball.transform.position = Vector3.MoveTowards(transform.position, target.position, step);
			
				//Checking balls position 
				print ("ball Position");
				print (ball.transform.position);
			
				//Pause here
				print ("PAUSE!");
				yield return new WaitForSeconds (waitTime);
			
				//Ball Returns to position
				ball.transform.position = new Vector3 (0, 0, 0);
				print ("ball reset");
				print (ball.transform.position);
			}

	}

What’s happening here is your ball moves slightly towards your coordinates for 1 frame, then it’s 8 seconds of waiting idly, and then it returns to (0,0,0). Then the same thing happens again and again.

You need to place the “pause” and “ball reset” code inside an if statement that checks if your ball has reached your destination.

Also, why are you using a for loop and only iterating 19 times? It won’t be enough. Use a while (bool), and let the bool be true until you’re sure you’ve finished doing all you needed to do.