• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by coolalan2016 · Mar 19, 2020 at 07:50 AM · prefabsweaponrespawnammo

I created a script what controls ammo, but after my player dies and respawns, the pistol refuses to reload the ammo when it reaches zero

As the title suggests, in my weapon script, I created an ammo system. Whenever ammo reaches 0, it will start reloading. The code is working completely fine, until the player dies and the game manager spawns the player's prefab. The game refuses to reload the pistol after it reaches zero, and I made sure that I hit apply already on my player prefab. Here is the code of my weapon and game manager. Weapon script:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Weapon : MonoBehaviour
 {
     public float fireRate = 0; //the fire rate of the weapon
     public int Damage = 10; //damage of the weapon
     public LayerMask whatToHit; //to tell the weapon to not hit what
 
     public Transform BulletTrailPrefab; //referencing the bullet trail
     public Transform MuzzleFlashPrefab; //referencing muzzle flash
     public Transform HitPrefab; //referencing the particle created when hit
 
     float timeToSpawnEffect = 0;
     public float effectSpawnRate = 10;
 
     float timeToFire = 0;
     Transform firePoint;
 
     //handle camera shaking
     public float camShakeAmt = 0.05f;
     public float camShakeLength = 0.1f;
     CameraShake camShake;
 
     private static int AmmoAmount = 150;
     private static int Ammo;
     public static int Ammo_
     {
         get { return Ammo; }
     }
 
     public GameObject ReloadingUI;
 
     void Awake()
     {
         firePoint = transform.Find ("FirePoint");
         if (firePoint == null)
         {
             Debug.LogError("No firepoint? WHAT!");
         }
     }
 
     void Start()
     {
         camShake = GameMaster.gm.GetComponent<CameraShake>();
         if (camShake == null)
             Debug.LogError("No CameraShake script found on GM object");
         Ammo = AmmoAmount;
     }
 
     // Update is called once per frame
     void Update()
     {
         if (fireRate == 0) //single burst gun
         {
             if (Input.GetButtonDown("Fire1"))
             {
                 if (Ammo > 0)
                 {
                     Shoot();
                     Ammo = Ammo - 1;
                     if (Ammo <= 0)
                     {
                         ReloadingUI.SetActive(true);
                         Invoke("Reload", 2f);
                     }
                 } 
             }
         }
         else
         {
             if (Input.GetButton("Fire1") && Time.time > timeToFire)
             {
                 if (Ammo > 0)
                 {
                     timeToFire = Time.time + 1 / fireRate;
                     Shoot();
                     Ammo = Ammo - 1;
                     if (Ammo <= 0)
                     {
                         ReloadingUI.SetActive(true);
                         Invoke("Reload", 3.5f);
                     }
                 }
             }
         }
     }
 
     void Shoot()
     {
         Vector2 mousePosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
         Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y);
         RaycastHit2D hit = Physics2D.Raycast(firePointPosition, mousePosition - firePointPosition, 100, whatToHit);
 
         Debug.DrawLine(firePointPosition, (mousePosition - firePointPosition) * 100, Color.cyan);
         if (hit.collider != null) //if we hit something, turn the raycast into a different colour
         {
             Debug.DrawLine(firePointPosition, hit.point, Color.red);
             Enemy enemy = hit.collider.GetComponent<Enemy>();
             if (enemy != null)
             {
                 enemy.DamageEnemy(Damage);
             }
         }
 
         if (Time.time >= timeToSpawnEffect)
         {
             Vector3 hitPos;
             Vector3 hitNormal;
 
             if (hit.collider == null)
             {
                 hitPos = (mousePosition - firePointPosition) * 30;
                 hitNormal = new Vector3(9999, 9999, 9999);
             }
             else
             {
                 hitPos = hit.point;
                 hitNormal = hit.normal;
             }
             Effect(hitPos, hitNormal);
             timeToSpawnEffect = Time.time + 1 / effectSpawnRate;
         }
     }
 
     void Effect(Vector3 hitPos, Vector3 hitNormal)
     {
         Transform trail = Instantiate(BulletTrailPrefab, firePoint.position, firePoint.rotation) as Transform;
 
         //referencing line renderer
         LineRenderer lr = trail.GetComponent<LineRenderer>();
         if (lr != null)
         {
             //SET POSITIONS
             lr.SetPosition(0, firePoint.position);
             lr.SetPosition(1, hitPos);
         }
         Destroy(trail.gameObject, 0.02f);
         if (hitNormal != new Vector3(9999, 9999, 9999))
         {
             Transform hitParticle = Instantiate(HitPrefab, hitPos, Quaternion.FromToRotation(Vector3.forward, hitNormal)) as Transform;
             Destroy(hitParticle.gameObject, 1f);
         }
 
         Transform clone = Instantiate(MuzzleFlashPrefab, firePoint.position, firePoint.rotation) as Transform;
         clone.parent = firePoint;
         float size = Random.Range(0.6f, 0.9f);
         clone.localScale = new Vector3(size, size, size);
         Destroy(clone.gameObject, 0.02f);
 
         camShake.Shake(camShakeAmt, camShakeLength);
     }
 
     void Reload()
     {
         Ammo = AmmoAmount;
         ReloadingUI.SetActive(false);
     }
 }

And this is my game manager:

 using UnityEngine;
 using System.Collections;
 
 public class GameMaster : MonoBehaviour
 {
 
     public static GameMaster gm;
 
     [SerializeField] private int maxLives = 3;
     private static int _remainingLives;
     public static int RemainingLives
     {
         get { return _remainingLives; }
     }
 
     void Awake()
     {
         if (gm == null)
         {
             gm = GameObject.FindGameObjectWithTag("GM").GetComponent<GameMaster>();
             cameraShake = GameMaster.gm.GetComponent<CameraShake>();
         }
     }
 
     void Start()
     {
         _remainingLives = maxLives;
     }
 
     public Transform playerPrefab;
     public Transform spawnPoint;
     public float spawnDelay = 2;
     public Transform spawnPrefab;
 
     public Transform enemyDeathParticles;
 
     public CameraShake cameraShake;
 
     [SerializeField] private GameObject gameOverUI;
 
     public float shakeAmt = 0.1f;
     public float shakeLength = 0.1f;
 
     public IEnumerator RespawnPlayer()
     {
         GetComponent<AudioSource>().Play();
         yield return new WaitForSeconds(spawnDelay);
 
         Instantiate(playerPrefab, spawnPoint.position, spawnPoint.rotation);
         Transform clone = Instantiate(spawnPrefab, spawnPoint.position, spawnPoint.rotation) as Transform;
         Destroy(clone, 3f);
     }
 
     public static void KillPlayer(Player player)
     {
         Destroy(player.gameObject);
         _remainingLives -= 1;
         if (_remainingLives <= 0)
         {
             gm.EndGame();
         }
         else
         {
             gm.StartCoroutine(gm.RespawnPlayer());
         }
     }
 
     public void EndGame()
     {
         Debug.Log("Endgame");
         gameOverUI.SetActive(true);
     }
 
     public static void KillEnemy(Enemy enemy)
     {
         gm._KillEnemy(enemy);
     }
 
     public void _KillEnemy(Enemy _enemy)
     {
         Destroy(_enemy.gameObject);
         cameraShake.Shake(shakeAmt, shakeLength);
         GameObject _clone = Instantiate(_enemy.deathParticles.gameObject, _enemy.transform.position, Quaternion.identity) as GameObject;
         Destroy(_clone.gameObject, 5f);
     }
 }



Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

207 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Problem with my Weapon Recharge script 0 Answers

Destroy a spawning enemy prefab with an weapon prefab 0 Answers

destroying a collected coin 2 Answers

Time delay enemy respawn 3 Answers

Error with the animator's code for initiating animations 0 Answers

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges