Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • 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.

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

Destroy a spawning enemy prefab with an weapon prefab 0 Answers

destroying a collected coin 2 Answers

Problem with my Weapon Recharge script 0 Answers

Change only prefab to change all objects 0 Answers

How do I instantiate UI prefabs 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges