- Home /
I kill all myenemies instead of one
Hello ! I managed to damage my enemies after a lot of difficulties but, now, when I kill one the other dies too.
GameObject GestureAttack()
{
invincible = true;
GameObject[] Foes = GameObject.FindGameObjectsWithTag("Foe");
GameObject closest = null;
float distance = Mathf.Infinity;
Vector3 position = transform.position;
foreach (GameObject go in Foes)
{
Vector3 diff = go.transform.position - position;
float curDistance = diff.sqrMagnitude;
if (curDistance < distance)
{
closest = go;
distance = curDistance;
}
}
if (recupgeste == "D" && recupgestescore > 0.60 || Input.GetKeyDown(KeyCode.Space))
{
transform.position = Vector3.MoveTowards(transform.position, closest.transform.position, 100);
foreach (GameObject go in Foes)
{
FoeCurrentHealth = go.GetComponent<s_EnnemyControl>().FoeCurrentHealth;
s_EnnemyControl enemyHealth = go.GetComponent<s_EnnemyControl>();
if (FoeCurrentHealth >0)
{
// Debug.Log("TOOK");
enemyHealth.TakeDamage(attackDamage);
}
}
}
return closest;
}
I think it's related to the enemyHealth.TakeDamage(attackDamage); who only target the script and not a particular enemy, but I can't manage to do something OK. Thanks and love
do you have any static
variables for health/damage/etc.?
or are you destroying ANY enemy ins$$anonymous$$d of a specific one? it's hard to tell with the code that you've posted ...unless it's too early and i'm missing something obvious ;)
@gjf No static, and I kill the closest one but if two of them are instancied, when i kill the closest the second one die too.
are the health levels low, so after killing the first, the next closest is attacked and dies almost immediately?
add some Debug.Log
stuff back in... as @deglet says, some more code might help too
Answer by fabian-mkv · May 05, 2016 at 03:39 PM
It seems to have to do with this second part of your code:
if (recupgeste == "D" && recupgestescore > 0.60 || Input.GetKeyDown(KeyCode.Space))
{
transform.position = Vector3.MoveTowards(transform.position, closest.transform.position, 100);
foreach (GameObject go in Foes)
{
FoeCurrentHealth = go.GetComponent<s_EnnemyControl>().FoeCurrentHealth;
s_EnnemyControl enemyHealth = go.GetComponent<s_EnnemyControl>();
if (FoeCurrentHealth >0)
{
// Debug.Log("TOOK");
enemyHealth.TakeDamage(attackDamage);
}
}
}
I'm not sure what recupgeste and recupgestescore are, but regardless of their values, when you push space the block gets executed. In it, your code deals damage to all enemies. Did you perhaps mean to only damage "closest"? I don't know what the rest of your code looks like, but this seems to be the reason.
Your answer
Follow this Question
Related Questions
2 player damage script 1 Answer
Detect enemy on animation 1 Answer
Temporary invulnerability in a platformer 1 Answer
How to get Enemy to break wall between it and Player. 1 Answer
Destroy enemy using raycasts 2 Answers