Collider Tag not working for enemy

I’m having a problem with letting the bullet notice it is an Enemy. This only happens when I try to use an explosionRadius. The enemy Prefab is correctly tagged as “Enemy”, but it still won’t recognize it as an “Enemy”. I don’t know how to fix it, I’ve tried numerous methods, but none worked.

See pictures and code to see what I mean.

    //Called when the bullet reaches a target 
    void HitTarget() {

        GameObject effectInstance = (GameObject)Instantiate(BulletImpactEffect, transform.position, transform.rotation);
        Destroy(effectInstance,2f);

        //If this bullet has an explosionRadius > 0 then it calls the explode function (This works for the missile)
        if (explosionRadius > 0f) {
            Explode();
        } else {
            Damage(target);
        }


        Destroy(gameObject);
    }

    //Explode function
    void Explode() {
        
        //Scans for each object in the radius of the explosion, if the object is tagged as "Enemy", Then it calls the damage function
        Collider[] colliders = Physics.OverlapSphere(transform.position,explosionRadius);
        foreach (Collider collider in colliders) {

            // Here is the problem. If I try != "Enemy" Then it removes all the objects that are not tagged as "Enemy". But when it is tagged it does nothing to the enemy?
            if (collider.tag == "Enemy") {
                Damage(collider.transform);
            }
        }
    }

    //For the moment it just destroys the gameObject
    void Damage(Transform enemy) {
        Destroy(enemy.gameObject);
    }

I see by your printscreen that the collider is not on this gameobject. Check that the gameObject containing the collider is also tagged “enemy”, or from your collider, (line 26), try to find the gameobject that you named “Enemy” (the one shown in your printscreen)

There doesn’t seem to be any collider on your enemy gameobject. In your code you directly destroy the object the collider is attached to. If you have collider(s) as child object(s) your code would only destroy those colliders and not the parent object.

Since your enemies seem to have a script called Enemy on the root, the easiest solution would be to do:

foreach (Collider collider in colliders)
{
    if (collider == null)
        continue;
    Enemy e = collider.GetComponentInParent<Enemy>();
    if (e == null)
        continue;
    Damage(e.transform);
}

Note that the first check if collider is null might not be necessary. However if one enemy has several child colliders you would need it as if two or more colliders of the same enemy are inside the radius the enemy might have been destroyed already when it processes the second collider in the list.

Hey, I don’t know if this will help or not, but try to change the Damage function to take a game object instead of a transform. Then do Damage(collider.gameObject); I do not know if that will work or not, I have not tested it, just a thought. After that change it to Destroy(enemy);