public void ShootOnTarget(Vector3 p_targetPos) { if (Time.time - m_lastfired <= 1 / m_weaponData.FireRate) { return; } if (OutOfAmmo) { Reload(); return; } m_currentAmmo--; m_lastfired = Time.time; Vector3 l_recoil = new Vector3(Recoil(), Recoil(), 0); Vector3 l_shotDirection = CustomMethod.GetNormalizedDirection(transform.position, (p_targetPos + l_recoil)); Ray l_ray = new Ray(transform.position, l_shotDirection); Physics.Raycast(l_ray, out RaycastHit l_hit, m_weaponData.Range, m_targetLayer, QueryTriggerInteraction.Collide); Debug.DrawRay(l_ray.origin, l_ray.direction * m_weaponData.Range, Color.magenta, 3); if (l_hit.collider != null) { IDamagable damagable = l_hit.transform.GetComponent <IDamagable>(); if (damagable != null) { damagable.TakeDamage(new DamageInfo(m_weaponData.Damage, l_hit.point, l_hit.normal)); } } //FX shootSfx?.Play(); flashFx?.Play(); }