- Home /
Player attacks once but the enemy takes double damages!
Player attacks once but the enemy takes double damages, sometimes the i=0, sometimes the i=1, it's very strange:
//Player Attack Method
void Attack()
{
if (Input.GetButtonDown("Attack"))
{
myAnimator.SetTrigger("Attack");
Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemies);
for (int i = 0; i < enemiesToDamage.Length; i++)
{
Debug.Log("i = " + i.ToString());
enemiesToDamage[i].GetComponent<Enemy>().TakeDamage(damage);
enemiesToDamage[i].GetComponent<Enemy>().GetComponent<SpriteRenderer>().color = Color.red;
}
}
}
//Enemy Take Damage
public void TakeDamage(int damage)
{
dazedTime = startDazedTime;
health -= damage;
Debug.Log("damage TAKEN !");
}
You sure that you are attacking just once? I don't see where you are calling Attack() from, but the code above does not wait till the animation is finished before allowing to attack again.. If not, I would add a Boolean in there to know if you are attacking or not and see if that solves the problem.
Edit:
If the problem is the logic I mentioned, I would set the bool (isAttacking = true, for example) and start a timer the length of your attack animation clip, then when the timer is up, set the Boolean to false and allow for another attack
oh my God, I just saw your reply, it hides in the Page by default, thank you very much, I will try it now ;)
Answer by mahmud91 · Mar 25, 2019 at 10:05 AM
Put a bool value like tookDamage.
if (Input.GetButtonDown("Attack"))
{
tookDamage = false;
...
and then set true in the TakeDamage method.
//Enemy Take Damage
public void TakeDamage(int damage)
{
if(!tookDamage){
tookDamage = true
dazedTime = startDazedTime;
health -= damage;
Debug.Log("damage TAKEN !");
}
}
hi, mahmud91, thank you for your reply, but the following two methods locate at two different Classes, how can I share the "tookDamage" bool variable?
//Player Attack $$anonymous$$ethod(in Player Class)
void Attack()
//Enemy Take Damage(in Enemy Class)
public void TakeDamage(int damage)
@zs8861 Have you tried what I mentioned above??
I found the problem, I forget to set the Exit Time, now it's O$$anonymous$$, thank you:)
Your answer
Follow this Question
Related Questions
auto select enemys 3 Answers
Player wont take damage 2 Answers
Damage script is screwed up...? what to do? 1 Answer
Problem with getcomponent replacing static variables 0 Answers
Attacking enemys 2 Answers