- Home /
Question by
Cryno1000 · Jun 20, 2020 at 11:03 PM ·
scripting problemphysicsrigidbodyfunctionscript error
Script isn't consistent
I'm making a VR game and I have a script that handles attaching and detaching weapon magazines when the player chooses. However, when I detach my magazine it's supposed to go to a certain position and have physics re-enabled yet it only does that ~10% of the time. The rest of the time, it doesn't go to the position it's supposed to and physics remain disabled.
Any ideas on what may be causing it?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MagazineSlot : MonoBehaviour
{
public Magazine currentMag;
public int currentAmmo;
public Transform gunGO;
public Gun gun;
public bool hasMagazine;
public Transform magazineSlot;
public MeshRenderer meshRenderer;
public GameObject detachSpot;
public int weapon;
/*Weapon key
* 1 - Pistol
* 2 - Assault Rifle
* 3 - Sub Machine Gun
* 4 - Shotgun
* 5 - Sniper
* 6 - Rocket Launcher
*/
public void Update()
{
if (currentMag != null)
{
currentAmmo = currentMag.currentAmmo;
}
if (weapon == 4)
{
if (gun.currentAmmo == 6)
{
meshRenderer.enabled = false;
}
}
if (Input.GetKeyDown(KeyCode.R) && currentMag != null) DetachMag();
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.GetComponent<Magazine>() != null)
{
if (weapon == other.gameObject.GetComponent<Magazine>().weaponType)
{
currentMag = other.gameObject.GetComponent<Magazine>();
if (currentMag.currentAmmo >= 1 && weapon != 4)
{
AttachMag();
}
else if (currentAmmo <= 5 && weapon == 4)
{
currentAmmo += currentMag.currentAmmo;
gun.hasMagazine = true;
gun.currentAmmo = currentAmmo;
hasMagazine = true;
Destroy(currentMag);
}
else
{
currentMag = null;
}
}
}
else
{
//Do nothing
}
}
public void AttachMag()
{
hasMagazine = true;
currentAmmo = currentMag.currentAmmo;
gun.currentAmmo = currentAmmo;
gun.hasMagazine = true;
Rigidbody rigidBody = currentMag.GetComponent<Rigidbody>();
rigidBody.useGravity = false;
rigidBody.isKinematic = true;
rigidBody.detectCollisions = false;
currentMag.transform.SetParent(magazineSlot);
currentMag.isAttached = true;
currentMag.transform.localRotation = Quaternion.identity;
meshRenderer.enabled = false;
}
public void DetachMag() //THIS IS THE ERROR
{
Rigidbody rigidBody = currentMag.gameObject.GetComponent<Rigidbody>();
rigidBody.useGravity = true;
rigidBody.isKinematic = false;
rigidBody.detectCollisions = true;
currentMag.transform.SetParent(detachSpot.transform);
if (gun.newShotChambered == true && weapon != 6)
{
currentAmmo = 1;
}
else if (gun.newShotChambered == false)
{
currentAmmo = 0;
}
StartCoroutine("waitToDetach");
}
public void DetachRocketAfterShoot()
{
hasMagazine = false;
gun.hasMagazine = false;
currentMag.isAttached = false;
meshRenderer.enabled = true;
Destroy(currentMag.gameObject);
currentMag = null;
Debug.Log("DRAS called");
gun.newShotChambered = false;
currentAmmo = 0;
gun.currentAmmo = 0;
}
public IEnumerator waitToDetach()
{
yield return new WaitForSeconds(0.1f);
currentMag.isAttached = false;
meshRenderer.enabled = true;
currentMag.transform.SetParent(null);
Debug.Log("currentMag = " + currentMag.name);
currentMag = null;
hasMagazine = false;
gun.hasMagazine = false;
}
}
Comment