- Home /
Raycast shoot not working properly
Hi everyone! Novice Unity user here, I haven't posted before as I've been told to always search for any problems since its very likely that someone has encountered the issue before, however there is one issue that keeps bugging me. I followed unity's "shooting with raycasts" tutorial, and started making a basic fps with that shoot script. It worked fine, however at one point, the raycasts stopped working properly. Sometimes their origin point would be higher than the gun barrel, sometimes lower, and also their direction would sometimes completely miss where I want it to go. Mind you, I do not want any kind of spread/bullet deviation in my game, I want all the guns to shoot straight.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RaycastShoot : MonoBehaviour
{
public float GunDamage = 35.0f;
public float FireRate = 0.25f;
public float HitForce = 100.0f;
public Transform GunEnd;
public float WeaponRange = 100.0f;
private Camera _fpsCam;
private WaitForSeconds _shotDuration = new WaitForSeconds(.07f);
private AudioSource _gunAudio;
private LineRenderer _laserLine;
private float _nextFire;
public int Ammo = 500;
private IEnumerator ShotEffect()
{
_gunAudio.Play();
_laserLine.enabled = false;
yield return _shotDuration;
_laserLine.enabled = true;
GetComponent<Animation>().Play("Recoil");
}
void Start()
{
_laserLine = GetComponent<LineRenderer>();
_gunAudio = GetComponent<AudioSource>();
_fpsCam = GetComponentInParent<Camera>();
Ammo = 30;
}
void Update()
{
if (Input.GetButtonDown("Fire1") && Time.time > _nextFire && Ammo>1)
{
_nextFire = Time.time + FireRate;
StartCoroutine(ShotEffect());
Vector3 rayOrigin = _fpsCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0.0f));
RaycastHit hit;
_laserLine.SetPosition(0, GunEnd.position);
if (Physics.Raycast(rayOrigin, _fpsCam.transform.forward, out hit, WeaponRange))
{
Debug.DrawRay(transform.position, _fpsCam.transform.forward * WeaponRange);
_laserLine.SetPosition(1, hit.point);
HealthManager HealthPoints = hit.collider.GetComponent<HealthManager>();
if (HealthPoints != null)
{
HealthPoints.ApplyDamage(GunDamage);
}
}
else
{
_laserLine.SetPosition(1, rayOrigin + (_fpsCam.transform.forward * WeaponRange));
}
Ammo = Ammo - 1;
}
if (Input.GetButtonDown("Reload"))
{
GetComponent<Animation>().Play("Reload");
}
}
public void AddAmmo(int amount)
{
Ammo += amount;
}
}
Also images depicting my problem (the pink line is the ray, and it should be starting from the end of the firingpoint, and going towards the crosshair.
alt text
Your answer
Follow this Question
Related Questions
Raycast damage script 2 Answers
change to raycast shooting instead of rigidbody shooting 1 Answer
Raycast Shooting problem 2 Answers
Raycast Shooting Help 1 Answer
NEED HELP WITH RAYCAST SHOOTING !!! 1 Answer