private void OnCollisionEnter2D(Collision2D collision) { if (collision.collider.gameObject.CompareTag(Strings.Tags.player)) { //Calculate the magnitude of the explosion based on collision distance from center Vector2 collisionPoint = collision.GetContact(0).point; float collisionDistance = (collisionPoint - rb.position).magnitude; float explosionMagnitude = 1f - collisionDistance / maxCollisionDistance; //Instantiate an explosion particle effect with appropriate magnitude GameObject explosionInstance = Instantiate(explosion, rb.position, Quaternion.Euler(0, 0, rb.rotation)) as GameObject; ExplosionController explosionController = explosionInstance.GetComponent <ExplosionController>(); explosionController.SetMagnitude(explosionMagnitude); //Play explosion sound playExplosionSound(explosionMagnitude); //Vibrate device explosionVibrate(explosionMagnitude); //Slow Time explosionTimeSlow(explosionMagnitude); Destroy(this.gameObject); //I put in lots of effot to make gate hits impactful :) } }