protected override void OnHit(RaycastHit raycastHit)
        {
            var IHittableComponents = raycastHit.collider.gameObject.GetComponents <IHittableObject>();

            foreach (var IHittableComponent in IHittableComponents)
            {
                IHittableComponent.OnHitByWeapon(0f, shotByPlayer);
            }

            var radialDamage = PoolManager.instance.Spawn <RadialDamage>(null, transform);

            radialDamage.damageRadius       = damageRadius;
            radialDamage.maxExplosionDamage = maxExplosionDamage;
            radialDamage.maxForceToApply    = maxForceToApply;
            radialDamage.enemiesLayer       = enemiesLayer;

            PoolManager.instance.Spawn <ExplosionType>(null, transform.position, Quaternion.identity);
        }
        protected override void OnHit(RaycastHit raycastHit)
        {
            var IHittableComponents = raycastHit.collider.gameObject.GetComponents <IHittableObject>();

            foreach (var IHittableComponent in IHittableComponents)
            {
                IHittableComponent.OnHitByWeapon(damageDealt, shotByPlayer);
            }

            if (forceToApplyOnObject > 0)
            {
                var hitObjRigidBody = raycastHit.collider.gameObject.GetComponent <Rigidbody>();
                if (hitObjRigidBody != null && !hitObjRigidBody.isKinematic)
                {
                    hitObjRigidBody.AddForceAtPosition(transform.forward * forceToApplyOnObject, raycastHit.point, ForceMode.VelocityChange);
                }
            }

            var explosion = PoolManager.instance.Spawn <ExplosionType>(null, lastPosition, Quaternion.identity);

            SetupExplosion(explosion);
        }