RaycastHit hit; Ray ray = playerCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0) + spreadOffset * 0.01f);
using UnityEngine; public class RealisticGun : MonoBehaviour { [Header("Weapon Stats")] public float damage = 35f; public float range = 100f; public float fireRate = 600f; // rounds per minute public int magazineSize = 30; public int currentAmmo; public float reloadTime = 2.5f; private bool isReloading = false; Realistic Guns -fps Shooter- Script Pastebin
// Optional: add a small camera shake StartCoroutine(CameraShake(0.05f, 0.1f)); } RaycastHit hit; Ray ray = playerCamera
[Header("Effects")] public Camera playerCamera; public ParticleSystem muzzleFlash; public GameObject impactEffect; public AudioSource shootSound; public AudioSource reloadSound; Ray ray = playerCamera.ViewportPointToRay(new Vector3(0.5f
// Spawn impact effect Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal)); }
// Shooting if (Input.GetButton("Fire1") && Time.time >= nextTimeToFire && currentAmmo > 0) { nextTimeToFire = Time.time + 60f / fireRate; Shoot(); }
[Header("Recoil & Spread")] public float recoilForce = 2.5f; public float maxSpread = 5f; public float spreadPerShot = 0.5f; private float currentSpread = 0f; private float spreadDecayRate = 20f; // per second