WaitForSeconds twice in 1 if statement, not working

I’m trying to get 1 animation to play after 10 seconds, and then 10 seconds later, the 2nd one plays.

The 1st animation plays fine, but the 2nd one won’t. See below at the very bottom. The LeftYellowSideWall is the 1st animation and the following RightYellow, is the 2nd.

void OnCollisionEnter2D (Collision2D Ball8Layer5Collider)
{

	StartCoroutine (Ball8Layer5Coroutine (Ball8Layer5Collider));

}

IEnumerator Ball8Layer5Coroutine (Collision2D Ball8Layer5Collider)
{
	if (Ball8Layer5Collider.gameObject.tag == "ball" && BallIsGreen == false) 
	{
		FakeBalls.SetActive (false);
		RevealedBalls.SetActive (false);

		//NorthWall.SetActive (true);

		rend.sharedMaterial = greenBall [1];

		audio.PlayOneShot (LockedAudio, volume);

		LockedSoundPlayed = true;

		BallIsGreen = true;
	}

	if (Ball8Layer5Collider.gameObject.tag == "ball" && LockedSoundPlayed == true) 
	{
		audio.PlayOneShot (GreenBallHitSound, volumeGreenBallHit);
	}

	if (Ball8Layer5Collider.gameObject.tag == "ball" && Ball15.GetComponent<Ball15Layer4GreenCollide>().BallIsGone == true) 
	{
		BG_Owl.GetComponent<SpriteRenderer> ().enabled = false;

		transBand.GetComponent<VideoPlayer> ().enabled = true;

		audio.PlayOneShot (BGClankReverbSound, volumeBGClankReverb);

		LeftYellowSideWall.GetComponent<LeftYellowWall> ().ColorChangeRed5();
		RightYellowSideWall.GetComponent<RightYellowWall> ().ColorChangeRed5 ();

		this.GetComponent<MeshRenderer>().enabled = false;
		this.GetComponent<CircleCollider2D> ().enabled = false;
		BallIsGreen = false;
		BallIsGone = true;

		MinusCounterFloor.GetComponent<BoxCollider2D> ().enabled = true;

		CountTrigger.GetComponent<BoxCollider2D> ().enabled = true;

		numberText.GetComponent<Text> ().color = new Color (0.035f, 0f, 1f, 1f);

		yield return new WaitForSeconds (10f);

		GreenBalls.SetActive (false);
		LeftYellowSideWall.GetComponent<LeftYellowWall> ().LeftYellowWallAnim.Play ("Left Yellow Side Wall MOVE BACK", -1, 0f);

		yield return new WaitForSeconds (10f);

		RightYellowSideWall.GetComponent<RightYellowWall> ().RightYellowWallAnim.Play ("Right Yellow Side Wall MOVE BACK", -1, 0f);

	}
}

I had a similar issue. The second one is always ignored. I don’t know why, just try using a timer with time.deltaTime, should work much better than using yield WaitForSeconds. That’s what I did.

I left a comment, but thought I would add this in case it helps. The first wait is yielding then returning control back to the coroutine so the second gets missed. The code after the if will be run next. Below is just an example to give some ideas.

IEnumerator Test()
{
     if(condition)
     {
           //Do something e.g play 1 fast
           yield return new WaitForSeconds(10);
     }else{
           //Do something e.g play 1 slow
           yield return new WaitForSeconds(10);
     }

     //Do something else e.g play 2
     yield break;
}