- Home /
How can i get my Coroutine to work every time my player takes damage?
Hey there, noob here!
Im looking to make my player blink/flash on and off when it collides with an enemy. I managed to make the coroutine work but it only works on the initial collision with an enemy but it doesn’t work again after the second or third hit. The player does take damage, the health does go down as expected but the blinking does not. This is my code so far;
This is from my Player script:
public void Damage()
{
health -= damage;
if (health <= 0)
{
health = 100;
lives--;
if (lives == 0)
{
Destroy(this.gameObject);
}
}
}
public IEnumerator BlinkingPlayerDamage()
{
Color color = spriteRenderer.color;
while (blinkTimer != blinkLength)
{
blinkTimer++;
color.a = 0.5f;
spriteRenderer.color = color;
yield return new WaitForSeconds(0.1f);
color.a = 1f;
spriteRenderer.color = color;
yield return new WaitForSeconds(0.1f);
}
}
}
This is from my Enemy script:
private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
Player player = other.transform.GetComponent<Player>();
//deals damamge when collision with with player occurs
if (player != null)
{
player.Damage();
player.StartCoroutine(player.BlinkingPlayerDamage());
}
Destroy(gameObject); //destroys enemy after collision
}
}
}
Ive tried setting a blinkActive bool to help and starting the coroutine from the damage method on the player Script but i still doesnt loop with every damage.
please help!
Answer by Llama_w_2Ls · Dec 21, 2020 at 04:50 PM
This code here might be the issue:
while (blinkTimer != blinkLength)
{
blinkTimer++;
//...
}
Are you resetting blinkTimer every time you run the coroutine. If not, the while loop will just break immediately from the last run, since blinkTimer is still equal to blinkLength from the first run. @maldia
omg! I just fixed it.. I feel so dumb. thank you sooo much! you're the best!
Your answer
![](https://koobas.hobune.stream/wayback/20220613021839im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Brain exploding ... Problem with an internal Coroutine manager 3 Answers
IEnumerator stops at yield 1 Answer
Custom fixed update cycle? 6 Answers
Using WaitForSeconds and trigger 1 Answer
Item duration doesn't stack 3 Answers