protected virtual bool Hit(RaycastHit hitInfo) {
     Damagable damagable = hitInfo.collider.GetComponentInParent<Damagable>();
     if (damagable != null) {
         if (damagable.GetTeam() == team) {
             return false;
         }
         if (damage > 0) {
             damagable.ReceiveDamage(new Damage(damage, damageType));
         }
     }
     OnHit?.Invoke(damagable);
     if (hitEffect != null) {
         GameObject newEffect = Instantiate(hitEffect);
         newEffect.transform.position = hitInfo.point - velocity.normalized * 0.02f;
         newEffect.transform.rotation = Quaternion.FromToRotation(Vector3.forward, hitInfo.normal);
     }
     Destroy(gameObject);
     return true;
 }