- 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
              
 
               
              Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                