public void Explode() { if (_exploded) { return; } _exploded = true; if (ExplosionModel != null) { GameObject explosion = Instantiate(ExplosionModel.gameObject, transform.position, transform.rotation); explosion.GetComponent <Explosion>().Init(4.0f); } GameObject[] targets = FindObjectsOfType <GameObject>(); // Damage contacter if (_contact != null) { GameObject contacter = _contact.gameObject; IPlaceable placeable = contacter.GetComponent <IPlaceable>(); if (placeable != null) { placeable.ReceiveDamage(ContactDamage); } } foreach (var tar in targets) { IPlaceable placeable = tar.GetComponent <IPlaceable>(); if (placeable == null) { continue; } //float dist = Vector2.Distance(transform.position, tar.transform.position); float dist = Physics2D.Distance(transform.GetComponent <Collider2D>(), tar.transform.GetComponent <Collider2D>()).distance; if (dist >= ExplosionRadius) { continue; } float dmg = CalculateDamage(dist); if (dmg > 0) { tar.GetComponent <IPlaceable>().ReceiveDamage(dmg); } } Destroy(gameObject); }