Question by
coolkidjeff6031 · Jan 03, 2020 at 11:13 PM ·
raycastgun
why does my raycast stop working after a few seconds?
i have a gun that uses a raycast to detect an enemy. before this code was working perfectly but now when i shoot an enemy after i wait a couple seconds the raycast does not detect the enemy
this is the gun code
using System.Collections;
using UnityEngine;
public class Gun : MonoBehaviour
{
public float damage = 25f;
public float range = .00000000000000000000000001f;
public float fireRate = 1f;
public int maxAmmo = 5;
private int currentAmmo;
public float reloadTime = 3f;
public bool isReloading = true;
public Camera fpsCam;
public ParticleSystem MuzzleFlash;
public GameObject impactEffect;
public float impactForce = 30f;
private float nextTimeToFire = 0f;
public Animator animator;
private void Start()
{
currentAmmo = maxAmmo;
}
void OnEnable()
{
isReloading = false;
animator.SetBool("Reloading", false);
}
// Update is called once per frame
void Update()
{
if (isReloading)
return;
if (currentAmmo <= 0)
{
StartCoroutine(Reload());
return;
}
if (Input.GetButtonDown("Fire1") && Time.time >= nextTimeToFire)
{
nextTimeToFire = Time.time + 1f / fireRate;
Shoot();
}
}
IEnumerator Reload()
{
isReloading = true;
Debug.Log("RELOAD");
animator.SetBool("Reloading", true);
yield return new WaitForSeconds(reloadTime - .25f);
animator.SetBool("Reloading", false);
yield return new WaitForSeconds(.25f);
currentAmmo = maxAmmo;
isReloading = false;
}
void Shoot()
{
MuzzleFlash.Play();
currentAmmo--;
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log(hit.transform.name);
Enemy enemy = hit.transform.GetComponent<Enemy>();
if (enemy != null)
{
enemy.TakeDamage(damage);
}
if (hit.rigidbody != null)
{
hit.rigidbody.AddForce(hit.normal * impactForce);
}
if (isReloading == true)
{
animator.SetBool("Shooting", false);
}
}
GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
Destroy(impactGO, 2f);
}
}
**
here is the enemy script
**public class Enemy : MonoBehaviour
{
public float health = 50f;
public void TakeDamage(float amount)
{
health -= amount;
if (health <= 0f)
{
Die();
}
}
void Die ()
{
Destroy(gameObject);
}
}
Comment
Answer by lgarczyn · Jan 04, 2020 at 07:08 PM
Your 'range' variable is extremely small, your raycast should actually never work.
Your answer
Follow this Question
Related Questions
How do you make bullet Spread? 0 Answers
How do I push objects with a laser gun 0 Answers
Getting a crosshair to project onto the object a barrel is aiming at 0 Answers
Shotguns with raycasts 0 Answers
Strange Raycast problem 0 Answers