[SOLVED]bool is getting reset by no reason
I have this Turret scrip
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.EventSystems;
  
 public class Turret : MonoBehaviour {
  
     public Transform target;
     private Enemy targetEnemy;
  
     [Header("General")]
     public float range = 15f;
  
     [Header("Use Bullets (default)")]
     public float fireRate = 1f;
     private float fireCountdown = 0f;
  
     [Header("Use Ice")]
     public bool useIce = false;
     public float slowAmount = .5f;
     public float slowRange = 10;
  
     [Header("Use Fire or Lighting")]
     public bool useFireOrLighting;
  
     public int damageOverTime = 55;
     public float damageRadius;
  
     [Header("Unity Setup Fields")]
     public GameObject rangeView;
     public string enemyTag = "Enemy";
  
     public Transform partToRotate;
     public float turnSpeed = 10f;
  
     public GameObject bulletPrefab;
     public Transform firePoint;
  
     public GameObject weaponTrail;
  
     private Animator anim;
  
     private GameObject thisTurret;
  
     private Vector3 turretBuildPosition;
  
     //[HideInInspector]
     //public GameObject turret;
     [HideInInspector]
     public Node node;
     [HideInInspector]
     public TurretBlueprint turretBlueprint;
     [HideInInspector]
     public bool isUpgradedL2 = false;
     [HideInInspector]
     public bool isUpgradedL3 = false;
  
     BuildManager buildManager;
  
     private void Awake()
     {
         anim = GetComponentInChildren<Animator>();
     }
  
     // Use this for initialization
     void Start ()
     {
         thisTurret = this.gameObject;
  
         InvokeRepeating("UpdateTarget", 0f, 0.5f);
  
         buildManager = BuildManager.instance;
     }
  
     public Vector3 GetBuildPosition()
     {
         return transform.position;
     }
  
     private void OnMouseDown()
     {
         //Debug.Log("This turret is: " + thisTurret.ToString());
         if (EventSystem.current.IsPointerOverGameObject())
         {
             return;
         }
  
         if (thisTurret != null)
         {
             buildManager.SelectTurret(this);
         }
     }
  
     public void UpgradeTurret()
     {
         Debug.Log("L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
  
         //Upgrade a turret
         if (turretBlueprint !=null && isUpgradedL2 == false && isUpgradedL3 == false)
         {
             if (PlayerStats.Money < turretBlueprint.upgradeCostL2)
             {
                 Debug.Log("Not enough money to upgrade that!");
                 return;
             }
  
             if (turretBlueprint != null && isUpgradedL2 == false)
             {
                 PlayerStats.Money -= turretBlueprint.upgradeCostL2;
  
                 //Get rid of the old turret
                 Destroy(thisTurret);
  
                 //Build a new one
                 GameObject _turret = (GameObject)Instantiate(turretBlueprint.upgradePrefabL2, GetBuildPosition(), Quaternion.identity);
                 thisTurret = _turret;
                 thisTurret.GetComponent<Turret>().turretBlueprint = turretBlueprint;
  
                 GameObject effect = (GameObject)Instantiate(buildManager.buildEffect, GetBuildPosition(), Quaternion.identity);
                 Destroy(effect, 5f);
                
                 thisTurret.transform.GetChild(0).gameObject.SetActive(false);
                 thisTurret.transform.GetChild(1).gameObject.SetActive(false);
                 BoxCollider bC = thisTurret.AddComponent<BoxCollider>();
                 bC.size = new Vector3(2, 34, 2);
  
                 buildManager.BoughtTurret();
  
                 thisTurret.GetComponent<Turret>().isUpgradedL2 = true;
                 Debug.Log("Turret upgraded!");
                 Debug.Log("L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
             }
         }
         else if (turretBlueprint != null && isUpgradedL2 == true && isUpgradedL3 == false)
         {
             if (PlayerStats.Money < turretBlueprint.upgradeCostL3)
             {
                 Debug.Log("Not enough money to upgrade that!");
                 return;
             }
  
             if (turretBlueprint != null && isUpgradedL3 == false)
             {
                 PlayerStats.Money -= turretBlueprint.upgradeCostL3;
  
                 //Get rid of the old turret
                 Destroy(thisTurret);
  
                 //Build a new one
                 GameObject _turret = (GameObject)Instantiate(turretBlueprint.upgradePrefabL3, GetBuildPosition(), Quaternion.identity);
                 thisTurret = _turret;
                 thisTurret.GetComponent<Turret>().turretBlueprint = turretBlueprint;
  
                 GameObject effect = (GameObject)Instantiate(buildManager.buildEffect, GetBuildPosition(), Quaternion.identity);
                 Destroy(effect, 5f);
  
                 thisTurret.transform.GetChild(0).gameObject.SetActive(false);
                 thisTurret.transform.GetChild(1).gameObject.SetActive(false);
                 BoxCollider bC = thisTurret.AddComponent<BoxCollider>();
                 bC.size = new Vector3(2, 34, 2);
  
                 buildManager.BoughtTurret();
  
                 isUpgradedL3 = true;
                 Debug.Log("Turret upgraded!");
                 Debug.Log("L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
             }
         }
         else if (turretBlueprint != null && isUpgradedL2 == true && isUpgradedL3 == true)
         {
             Debug.Log("Max Level!");
         }
     }
  
     void UpdateTarget()
     {
         GameObject[] enemies = GameObject.FindGameObjectsWithTag(enemyTag);
         float shortestDistance = Mathf.Infinity;
         GameObject nearestEnemy = null;
  
         foreach(GameObject enemy in enemies)
         {
             float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position);
             if(distanceToEnemy <= range)
             {
                 targetEnemy = enemy.GetComponent<Enemy>();
             }
  
             //Default Target
             if (distanceToEnemy < shortestDistance)
             {
                 shortestDistance = distanceToEnemy;
                 nearestEnemy = enemy;
             }
            
             //Nearest Target
             //if(distanceToEnemy <= range)
             //{
             //    shortestDistance = distanceToEnemy;
             //    nearestEnemy = enemy;
             //}
         }
  
         if(nearestEnemy != null && shortestDistance <= range)
         {
             target = nearestEnemy.transform;
             //targetEnemy = nearestEnemy.GetComponent<Enemy>();
             anim.SetBool("isAttacking", true);
             weaponTrail.SetActive(true);
         }
         else
         {
             target = null;
         }
     }
    
     // Update is called once per frame
     void Update ()
     {
  
         if(target == null)
         {
             anim.SetBool("isAttacking", false);
             weaponTrail.SetActive(false);
             return;
         }
  
         LockOnTarget();
  
         if(fireCountdown <= 0f)
         {
             Shoot();
             fireCountdown = 1f / fireRate;
         }
  
         fireCountdown -= Time.deltaTime;
     }
  
     void LockOnTarget()
     {
         //Target lock on
         Vector3 dir = target.position - transform.position;
         Quaternion lookRotation = Quaternion.LookRotation(dir);
         Vector3 rotation = Quaternion.Lerp(partToRotate.rotation, lookRotation, Time.deltaTime * turnSpeed).eulerAngles;
         partToRotate.rotation = Quaternion.Euler(0f, rotation.y, 0f);
     }
  
     void Shoot()
     {
         //anim.SetBool("isAttacking", true);
         //weaponTrail.SetActive(true);
  
         if(useFireOrLighting)
         {
             FireAndLighting();
         }
         else if(useIce)
         {
             IceAttack();
         }
         else
         {
             //Debug.Log("Use bullets!");
             GameObject bulletGO = (GameObject)Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
             Bullet bullet = bulletGO.GetComponent<Bullet>();
  
             if (bullet != null)
             {
                 //Debug.Log("We shoot");
                 bullet.Seek(target);
             }
         }
     }
  
     void FireAndLighting()
     {
         //target.GetComponent<Enemy>().TakeDamage(damageOverTime * Time.deltaTime);
  
         Collider[] colliders = Physics.OverlapSphere(transform.position, damageRadius);
  
         foreach (Collider collider in colliders)
         {
             if (collider.tag == "Enemy")
             {
                 targetEnemy.TakeDamage(damageOverTime * Time.deltaTime);
             }
         }
     }
  
     void IceAttack()
     {
         //Debug.Log("It use Ice!");
  
         Collider[] colliders = Physics.OverlapSphere(transform.position, slowRange);
        
         foreach (Collider collider in colliders)
         {
             if (collider.tag == "Enemy")
             {
                 targetEnemy.Slow(slowAmount);
                 GameObject bulletGO = (GameObject)Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
                 Bullet bullet = bulletGO.GetComponent<Bullet>();
  
                 if (bullet != null)
                 {
                     //Debug.Log("We shoot");
                     bullet.Seek(target);
                 }
             }
         }
     }
  
  
     private void OnDrawGizmosSelected()
     {
         Gizmos.color = Color.red;
         Gizmos.DrawWireSphere(transform.position, range);
     }
 }
The problem is line 94 to line 173. Everything work fine until is upgraded to level 3. The bools are isUpgradedL2 = true and isUpgradedL3 true but when I run the code again they are false and false. I suspect they get reset after I exit the function but I can't figure out why.
Answer by DaresFireson · Apr 06, 2019 at 10:55 AM
well it did't work but I have found a solution by adding:
 thisTurret.GetComponent<Turret>().isUpgradedL2 = true;
 thisTurret.GetComponent<Turret>().isUpgradedL3 = true;
now my Upgrade function look like this:
 public void UpgradeTurret()
     {
         //Debug.Log("At the start of the function L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
 
         //Upgrade a turret
         if (turretBlueprint != null && isUpgradedL2 == false && isUpgradedL3 == false)
         {
             if (PlayerStats.Money < turretBlueprint.upgradeCostL2)
             {
                 Debug.Log("Not enough money to upgrade that!");
                 return;
             }
 
             PlayerStats.Money -= turretBlueprint.upgradeCostL2;
 
             //Get rid of the old turret
             Destroy(thisTurret);
 
             //Build a new one
             GameObject _turret = (GameObject)Instantiate(turretBlueprint.upgradePrefabL2, GetBuildPosition(), Quaternion.identity);
             thisTurret = _turret;
             thisTurret.GetComponent<Turret>().turretBlueprint = turretBlueprint;
 
             //Instantiate effect and Set range and came to inactive
             HideAndCreate();
 
             thisTurret.GetComponent<Turret>().isUpgradedL2 = true;
             //Debug.Log("Turret upgraded!");
             //Debug.Log("L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
         }
         else if (turretBlueprint != null && isUpgradedL2 == true && isUpgradedL3 == false)
         {
             if (PlayerStats.Money < turretBlueprint.upgradeCostL3)
             {
                 Debug.Log("Not enough money to upgrade that!");
                 return;
             }
 
             PlayerStats.Money -= turretBlueprint.upgradeCostL3;
 
             //Get rid of the old turret
             Destroy(thisTurret);
 
             //Build a new one
             GameObject _turret = (GameObject)Instantiate(turretBlueprint.upgradePrefabL3, GetBuildPosition(), Quaternion.identity);
             thisTurret = _turret;
             thisTurret.GetComponent<Turret>().turretBlueprint = turretBlueprint;
 
             //Instantiate effect and Set range and came to inactive
             HideAndCreate();
 
             thisTurret.GetComponent<Turret>().isUpgradedL2 = true;
             thisTurret.GetComponent<Turret>().isUpgradedL3 = true;
             isUpgradedL3 = true;
             //Debug.Log("Turret upgraded!");
             //Debug.Log("L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
         }
         else if (turretBlueprint != null && isUpgradedL2 == true && isUpgradedL3 == true)
         {
             Debug.Log("Max Level!");
         }
 
         //Debug.Log("Out of the function L2: " + isUpgradedL2 + " L3: " + isUpgradedL3);
     }
Answer by Vollmondum · Apr 06, 2019 at 05:03 AM
Lines 54 and 56. You intentionally set those to false. Level resets, bools reset. Remove those "= false" and leave unassigned, and be happy
Your answer
 
 
             Follow this Question
Related Questions
Adding a cost reduction to my purchasable items 1 Answer
C# Unity dot syntax exercise correct solution? 1 Answer
problem with asset 2 Answers
I seriously cannot learn how to script. What do I do? 4 Answers
Determine an unknown script 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                