- Home /
 
               Question by 
               ILoveMyDada · Jun 29, 2017 at 10:13 AM · 
                animationcollisionwaitforseconds  
              
 
              Trigger Animation after Wait For Seconds
Hi I'm trying to trigger an Animation using a Collider. I have an IEnumerator setup so that it happens a couple seconds after the collision takes place.
Problem is that when I place the animation code BEFORE the "yield return new WaitForSeconds", it works fine, but AFTER, for some reason it doesn't work.
See at the bottom below for the LeftYellowSideWall code. That is the Animation. And the WaitForSeconds is a couple lines above it.
                                                                                            IEnumerator OnCollisionEnter2D (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);
         //Ball8.SetActive (false);
         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 (2);
         GreenBalls.SetActive (false);
         LeftYellowSideWall.GetComponent<LeftYellowWall> ().LeftYellowWallAnim.Play ("Left Yellow Side Wall MOVE BACK", -1, 0f);
     }
 }
               Comment
              
 
               
               
               Best Answer 
              
 
              Answer by sambid123sameer · Jun 29, 2017 at 10:54 AM
OnCollisionEnter2D is not a coroutine
Make a separate Coroutine function and then call it
 void OnCollisionEnter2D (Collision2D Ball8Layer5Collider)
  {
     StartCoroutine(CoroutineName(Ball8Layer5Collider));
  }
 
 IEnumerator CoroutineName (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);
          //Ball8.SetActive (false);
          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 (2);
          GreenBalls.SetActive (false);
          LeftYellowSideWall.GetComponent<LeftYellowWall> ().LeftYellowWallAnim.Play ("Left Yellow Side Wall MOVE BACK", -1, 0f);
      }
 }
Something like that
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                