RaycastGun.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 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 ; } } |