public void Shoot() { if (TimeToNextShot < Time.time && CurrentState == WeaponState.Weapon_Ready) { TimeToNextShot = Time.time + _f_TimeBetweenShots; Vector3 StartPoint = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0.0f)); RaycastHit Hit; if (Physics.Raycast(StartPoint, Camera.main.transform.forward, out Hit)) { GameObject hitObject = Hit.transform.gameObject; ITakeDamage damageableObject = hitObject.GetComponent <ITakeDamage>(); if (damageableObject != null) { damageableObject.ApplyDamage(I_Damage); } Head head = hitObject.GetComponent <Head>(); if (head != null) { damageableObject = head.transform.parent.GetComponent <ITakeDamage>(); damageableObject.Kill(); } } I_AmmoInGun--; float recoilAmount = Random.Range(_f_MinVerticalRecoilPerShot, _f_MaxVerticalRecoilPerShot); _v2_Recoil = WeaponTransform.eulerAngles + recoilAmount * Vector3.right; ApplyVerticalRecoil(); } }