using System.Collections; using System.Collections.Generic; using UnityEngine; public class RaycastShot : MonoBehaviour { public int gunDamage = 1; public float fireRate = 0.25f; public float weapnRange = 50f; public float hitForce = 300f; public Transform gunEnd; private Camera fpsCam; private WaitForSeconds shotDuration = new WaitForSeconds(0.07f); private AudioSource gunAudio; private LineRenderer laserLine; private float nextFire; void Start () { print("ok1"); laserLine = GetComponent<LineRenderer>(); gunAudio = GetComponent<AudioSource>(); fpsCam = GetComponent<Camera>(); print("ok2"); } void Update () { if(Input.GetButtonDown("Fire1") && Time.time > nextFire) { nextFire = Time.time + fireRate; // fireRate分の時間は発射できない。 StartCoroutine(ShotEffect()); Vector3 rayOrigin = fpsCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0)); RaycastHit hit; laserLine.SetPosition(0, gunEnd.position); if(Physics.Raycast(rayOrigin, fpsCam.transform.forward, out hit, weapnRange)) { laserLine.SetPosition(1, hit.point); ShootableBox health = hit.collider.GetComponent<ShootableBox>(); if(health != null) { health.Damage(gunDamage); } if(hit.rigidbody != null) { // 「hit.normal」の使い方をマスターする。 hit.rigidbody.AddForce(-hit.normal * hitForce); } } else { laserLine.SetPosition(1, rayOrigin + (fpsCam.transform.forward * weapnRange)); } } } private IEnumerator ShotEffect() { gunAudio.Play(); laserLine.enabled = true; yield return shotDuration; // 0.07秒後にレーザーラインが消える。(0.07秒間待機して後、レーザーラインが消える。) laserLine.enabled = false; } // private IEnumerator ShotEffect() // { // // Play the shooting sound effect // gunAudio.Play(); // // Turn on our line renderer // laserLine.enabled = true; // //Wait for .07 seconds // yield return shotDuration; // // Deactivate our line renderer after waiting // laserLine.enabled = false; // } }