- Home /
Question by
SpiderManAW · Jun 25, 2020 at 10:46 AM ·
scripting problemprogrammingbeginnerscriptingproblembeginners
On raycast hit remove Rigidbody
ive tried very hard to get this working. Basically I have a gun and when you shoot it fires a raycast. it should destroy the object that is tagged Player when it is hit, but It removes the collider instead, I tried to change it to a rigidbody but it dosent work. and help is appreciated. this is a scripting problem.
using UnityEngine;
using TMPro;
public class GunSystem : MonoBehaviour
{
//Gun stats
public int damage;
public float timeBetweenShooting, spread, range, reloadTime, timeBetweenShots;
public int magazineSize, bulletsPerTap;
public bool allowButtonHold;
int bulletsLeft, bulletsShot;
public AudioSource shootSound;
public AudioSource reloadSound;
//bools
bool shooting, readyToShoot, reloading;
//Reference
public Camera fpsCam;
public Transform attackPoint;
public RaycastHit rayHit;
public LayerMask whatIsEnemy;
//Graphics
public GameObject muzzleFlash, bulletHoleGraphic;
public CameraShake cameraShake;
public float cameraShakeMagnitude, cameraShakeDuration;
public TextMeshProUGUI text;
private void Awake()
{
bulletsLeft = magazineSize;
readyToShoot = true;
}
void Start()
{
fpsCam = GameObject.Find("fpscam").GetComponent<Camera>();
}
private void Update()
{
MyInput();
//SetText
text.SetText(bulletsLeft + " / " + magazineSize);
}
private void MyInput()
{
if (allowButtonHold) shooting = Input.GetKey(KeyCode.Mouse0);
else shooting = Input.GetKeyDown(KeyCode.Mouse0);
if (Input.GetKeyDown(KeyCode.R) && bulletsLeft < magazineSize && !reloading) Reload();
//Shoot
if (readyToShoot && shooting && !reloading && bulletsLeft > 0)
{
bulletsShot = bulletsPerTap;
Shoot();
}
}
private void Shoot()
{
readyToShoot = false;
shootSound.Play();
//Spread
float x = Random.Range(-spread, spread);
float y = Random.Range(-spread, spread);
//Calculate Direction with Spread
Vector3 direction = fpsCam.transform.forward + new Vector3(x, y, 0);
//RayCast
if (Physics.Raycast(fpsCam.transform.position, direction, out rayHit, range, whatIsEnemy))
{
Debug.Log(rayHit.collider.name);
if (rayHit.collider.CompareTag("Player"))
{
Destroy(rayHit.collider);
}
}
//ShakeCamera
cameraShake.Shake(cameraShakeDuration, cameraShakeMagnitude);
//Graphics
Instantiate(bulletHoleGraphic, rayHit.point, Quaternion.Euler(0, 180, 0));
Instantiate(muzzleFlash, attackPoint.position, Quaternion.identity);
bulletsLeft--;
bulletsShot--;
Invoke("ResetShot", timeBetweenShooting);
if (bulletsShot > 0 && bulletsLeft > 0)
Invoke("Shoot", timeBetweenShots);
}
private void ResetShot()
{
readyToShoot = true;
}
private void Reload()
{
reloading = true;
Invoke("ReloadFinished", reloadTime);
reloadSound.Play();
}
private void ReloadFinished()
{
bulletsLeft = magazineSize;
reloading = false;
}
}
Comment
Answer by Namey5 · Jun 26, 2020 at 12:10 AM
Well that would be because you specify that the collider itself should be destroyed;
if (rayHit.collider.CompareTag("Player"))
{
Destroy(rayHit.collider);
}
If you want it to delete the entire object, then you will need to destroy either the transform or the gameObject;
Destroy(rayHit.transform.gameObject);