- Home /
AOE C# applying damage multiple times to one target instead of evenly among all of them
I tried following a couple of examples on this site (most notably http://answers.unity3d.com/questions/14207/how-to-apply-explosionmagicgrenade-damage-to-detec.html) to make an aoe that triggers at an enemy corpse to damage nearby enemies. Instead, it counts the number of enemies nearby and deals damage based on that to the original target. What am I getting wrong? (This script is embedded in the Defend script)
public void CorpseExplosion(Vector3 location, float radius, int damage)
{
Collider[] objectsInRange = Physics.OverlapSphere(location, radius);
print(objectsInRange + " are the objects in range");
foreach (Collider col in objectsInRange)
{
Unit enemy = col.GetComponent<Unit>();
if (enemy != null)
{
print(enemy + "has component Unit");
Defend(enemy, 1);
}
}
}
Defend requires a Unit and damage integer. I have been using 1 for testing purposes. Attempting to link the Defend script doesn't properly format it so it has been excluded, but shouldn't be required.
I finally figured it out after a few days. The final code looks like this:
public void CorpseExplosion(Vector3 location, float radius, int damage)
{
Collider[] objectsInRange = Physics.OverlapSphere(location, radius);
print(objectsInRange + " are the objects in range");
List<Unit> enemies = new List<Unit>();
foreach (Collider col in objectsInRange)
{
Unit enemy = col.GetComponent<Unit>();
if (enemy != null)
{
print(enemy + "has component Unit");
enemies.Add(enemy);
}
}
for (int cnt = 0; cnt < enemies.Count(); cnt++)
{
Unit enemy = enemies[cnt];
print(enemy + " is the enemy.");
enemy.HitPoints -= $$anonymous$$athf.Clamp(damage - enemy.DefenceFactor, 1, damage);
print(enemy.HitPoints + " is the enemy.HitPoints");
if (enemy.HitPoints <= 0)
{
enemy.PlayerFaction = -1;
}
if (enemy.HitPoints + (enemy.TotalHitPoints - 1) <= 0)
{
enemy.OnDestroyed();
}
print("Target is " + enemy + " and count is " + cnt);
}
}
Your answer
Follow this Question
Related Questions
continuous damage 1 Answer
Area Effect Damage 2 Answers
Null reference and GetComponent 1 Answer
Unet Multiplayer rocketlauncher 0 Answers
How to make OnTriggerEnter2D affect only one collider? 0 Answers