RaycastGun.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(LineRenderer))] public class RaycastGun : MonoBehaviour { public Camera playerCamera; public Transform laserOrigin; public float gunRange = 50f; public float fireRate = 0.2f; public float laserDuration = 0.05f; LineRenderer laserLine; float fireTimer; void Awake() { laserLine = GetComponent<LineRenderer>(); } void Update() { fireTimer += Time.deltaTime; if(Input.GetButtonDown("Fire1") && fireTimer > fireRate) { fireTimer = 0; laserLine.SetPosition(0, laserOrigin.position); Vector3 rayOrigin = playerCamera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0)); RaycastHit hit; if(Physics.Raycast(rayOrigin, playerCamera.transform.forward, out hit, gunRange)) { laserLine.SetPosition(1, hit.point); Destroy(hit.transform.gameObject); } else { laserLine.SetPosition(1, rayOrigin + (playerCamera.transform.forward * gunRange)); } StartCoroutine(ShootLaser()); } } IEnumerator ShootLaser() { laserLine.enabled = true; yield return new WaitForSeconds(laserDuration); laserLine.enabled = false; } }