private void OnCollisionEnter(Collision other) { VitalityComponent vitality = other.gameObject.GetComponent <VitalityComponent> (); if (vitality != null) { vitality.TakeDamage(damage, other.contacts[0].point); } if (damageRadius > 0.001f) { int amount = Physics.OverlapSphereNonAlloc(this.trans.position, damageRadius, nonAlloc, damageMask); for (int i = 0; i < amount; i++) { VitalityComponent vit = nonAlloc [i].gameObject.GetComponent <VitalityComponent> (); if (vit && vit.tag != "Player" && vit != vitality) { vit.TakeDamage( damage * Vector3.Distance(this.trans.position, vit.transform.position) / damageRadius, vit.transform.position ); } } } if (impactClip != null) { AudioSource.PlayClipAtPoint(impactClip, Vector3.zero, impactClipVolume); } if (explosionEffectPrefab != null) { ParticleManager.GetInstance().Show(explosionEffectPrefab.name, this.trans.position); } collisionAmount++; if (ammunition != null && (resistance <= collisionAmount || vitality == null)) { ammunition.Recycle(this); } }