- 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
![](https://koobas.hobune.stream/wayback/20220612125132im_/https://answers.unity.com/themes/thub/images/avi.jpg)