I am trying to implement a new attack into my project. I can get the projectile to spawn and deal damage to an enemy, however, once it deals damage, every enemy gets destroyed instead of just the one that was hit. I am not using any static variables and I cannot figure out why this issue is happening.
Here is the projectile script:
public GameObject HeavyExplosion;
public GameObject LightExplosion;
public float HeavyMissileSpeed = 1;
public float LightMissileSpeed = 1;
public float HeavyLaserSpeed;
public float LightLaserSpeed;
public float HeavyBulletSpeed;
public float LightBulletSpeed;
Rigidbody RB;
public int HeavyMissileDamage;
public int LightMissileDamage;
public int HeavyLaserDamage;
public int LightLaserDamage;
public int HeavyBulletDamage;
public int LightBulletDamage;
public float ProjectileTimeout;
float TimeElapsed;
bool HasExploded;
void Start()
{
RB = gameObject.GetComponent<Rigidbody>();
HasExploded = false;
}
void Update()
{
TimeElapsed += Time.deltaTime;
if(TimeElapsed >= ProjectileTimeout)
{
Destroy(gameObject);
}
}
void FixedUpdate()
{
if (gameObject.CompareTag("HeavyMissile") && !HasExploded)
{
RB.velocity = HeavyMissileSpeed * gameObject.transform.forward;
}
if (gameObject.CompareTag("LightMissile") && !HasExploded)
{
RB.velocity = LightMissileSpeed * gameObject.transform.forward;
}
if (gameObject.CompareTag("HeavyLaser"))
{
RB.velocity = HeavyLaserSpeed * gameObject.transform.forward;
}
if (gameObject.CompareTag("LightLaser"))
{
RB.velocity = LightLaserSpeed * gameObject.transform.forward;
}
if (gameObject.CompareTag("HeavyBullet"))
{
RB.velocity = HeavyBulletSpeed * gameObject.transform.forward;
}
if (gameObject.CompareTag("LightBullet"))
{
RB.velocity = LightBulletSpeed * gameObject.transform.forward;
}
}
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Enemy") && gameObject.CompareTag("HeavyMissile"))
{
collision.transform.parent.GetComponent<EnemyHealth>().DealDamage(HeavyMissileDamage);
GetComponent<MeshRenderer>().enabled = false;
GetComponent<Collider>().enabled = false;
RB.velocity = new Vector3(0, 0, 0);
Instantiate(HeavyExplosion, transform);
HasExploded = true;
Destroy(gameObject, 1);
}
else if (collision.gameObject.CompareTag("Enemy") && gameObject.CompareTag("LightMissile"))
{
collision.transform.parent.GetComponent<EnemyHealth>().DealDamage(LightMissileDamage);
GetComponent<MeshRenderer>().enabled = false;
GetComponent<Collider>().enabled = false;
RB.velocity = new Vector3(0, 0, 0);
Instantiate(LightExplosion, transform);
HasExploded = true;
Destroy(gameObject, 1);
}
else if (collision.gameObject.CompareTag("Enemy") && gameObject.CompareTag("HeavyLaser"))
{
collision.transform.parent.GetComponent<EnemyHealth>().DealDamage(HeavyLaserDamage);
Destroy(gameObject);
}
else if (collision.gameObject.CompareTag("Enemy") && gameObject.CompareTag("LightLaser"))
{
collision.transform.parent.GetComponent<EnemyHealth>().DealDamage(LightLaserDamage);
Destroy(gameObject);
}
else if (collision.gameObject.CompareTag("Enemy") && gameObject.CompareTag("HeavyBullet"))
{
collision.transform.parent.GetComponent<EnemyHealth>().DealDamage(HeavyBulletDamage);
Destroy(gameObject);
}
else if (collision.gameObject.CompareTag("Enemy") && gameObject.CompareTag("LightBullet"))
{
collision.transform.parent.GetComponent<EnemyHealth>().DealDamage(LightBulletDamage);
Destroy(gameObject);
}
else
{
Destroy(gameObject);
}
}
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Enemy") && gameObject.CompareTag("HeavyMissile"))
{
other.transform.parent.GetComponent<EnemyHealth>().DealDamage(HeavyMissileDamage);
GetComponent<MeshRenderer>().enabled = false;
GetComponent<Collider>().enabled = false;
RB.velocity = new Vector3(0, 0, 0);
Instantiate(HeavyExplosion, transform);
HasExploded = true;
Destroy(gameObject, 1);
}
else if (other.CompareTag("Enemy") && gameObject.CompareTag("LightMissile"))
{
other.transform.parent.GetComponent<EnemyHealth>().DealDamage(LightMissileDamage);
GetComponent<MeshRenderer>().enabled = false;
GetComponent<Collider>().enabled = false;
RB.velocity = new Vector3(0, 0, 0);
Instantiate(LightExplosion, transform);
HasExploded = true;
Destroy(gameObject, 1);
}
else if (other.CompareTag("Enemy") && gameObject.CompareTag("HeavyLaser"))
{
other.transform.parent.GetComponent<EnemyHealth>().DealDamage(HeavyLaserDamage);
Destroy(gameObject);
}
else if (other.CompareTag("Enemy") && gameObject.CompareTag("LightLaser"))
{
other.transform.parent.GetComponent<EnemyHealth>().DealDamage(LightLaserDamage);
Destroy(gameObject);
}
else if (other.CompareTag("Enemy") && gameObject.CompareTag("HeavyBullet"))
{
other.transform.parent.GetComponent<EnemyHealth>().DealDamage(HeavyBulletDamage);
Destroy(gameObject);
}
else if (other.CompareTag("Enemy") && gameObject.CompareTag("LightBullet"))
{
other.transform.parent.GetComponent<EnemyHealth>().DealDamage(LightBulletDamage);
Destroy(gameObject);
}
}
Here is the enemy health script:
public int MaxHealth = 1;
int HP;
public GameObject Explosion;
public EnemySpawnerEternal SpawnReference { get; set; }
void Awake()
{
HP = MaxHealth;
}
public void DealDamage(int Damage)
{
HP -= Damage;
if(HP <= 0)
{
if(SpawnReference != null)
{
SpawnReference.ResartSpawner();
}
GameObject.Instantiate(Explosion, transform.position, Quaternion.identity);
Destroy(gameObject);
}
}
}
public class EnemyHealth : MonoBehaviour {
\$\endgroup\$