Hi guys! I'm working at a clicker game for android. I added a piece of code and when I'm entering playmode and click an upgrade button, entire unity freeze and I need to close it!
,using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;
public class Buy : MonoBehaviour {
 public Button CPU;
 public Button CPUC;
 public Button GPU;
 public Button GPUC;
 public Button RAM;
 public Button RAMC;
 public Button PSU;
 public Button PSUC;
 public Button FAN;
 public Button FANC;
 public GameObject Error;
 public int CPUPRICE = 200;
 public int GPUPRICE = 300;
 public int RAMPRICE = 100;
 public int PSUPRICE = 100;
 public int FANPRICE = 50;
 public int CPUMaxUpgrade = 5;
 public int GPUMaxUpgrade = 5;
 public int RAMMaxUpgrade = 5;
 public int PSUMaxUpgrade = 5;
 public int FANMaxUpgrade = 5;
 public int CPUUpgrade = 1;
 public int GPUUpgrade = 1;
 public int RAMUpgrade = 1;
 public int PSUUpgrade = 1;
 public int FANUpgrade = 1;
 public void BuyCPU(){
     BitcoinGlobal.BitcoinCount -= CPUPRICE;
     CPUPRICE = CPUPRICE + 300;
     if (CPUUpgrade == CPUMaxUpgrade) {
         CPU.interactable = false;
         CPUC.interactable = false;
     } else
         ++CPUUpgrade;
     if (BitcoinGlobal.BitcoinCount <= CPUPRICE) {
         Error.GetComponent<Text> ().text = "You don't have " + CPUPRICE + " for buying this upgrade";
 
               //this is the code that is freezing unity
         while (BitcoinGlobal.BitcoinCount <= CPUPRICE) {
             CPU.interactable = false;
             CPUC.interactable = false;
         }
     }
 }
     public void BuyGPU(){
         BitcoinGlobal.BitcoinCount -= GPUPRICE;
         GPUPRICE = GPUPRICE + 400;
         if (GPUUpgrade == GPUMaxUpgrade) {
             GPU.interactable = false;
             GPUC.interactable = false;
         } else
             ++GPUUpgrade;
         if (BitcoinGlobal.BitcoinCount <= GPUPRICE) {
             Error.GetComponent<Text> ().text = "You don't have " + GPUPRICE + " for buying this upgrade";
 
               //this is the code that is freezing unity
         while (BitcoinGlobal.BitcoinCount <= GPUPRICE) {
             GPU.interactable = false;
             GPUC.interactable = false;
         }
         }
     }
 public void BuyRAM(){
     BitcoinGlobal.BitcoinCount -= RAMPRICE;
     RAMPRICE = RAMPRICE + 200;
     if (RAMUpgrade == RAMMaxUpgrade) {
         RAM.interactable = false;
         RAMC.interactable = false;
     } else
         ++RAMUpgrade;
     if (BitcoinGlobal.BitcoinCount <= RAMPRICE) {
         Error.GetComponent<Text> ().text = "You don't have " + RAMPRICE + " for buying this upgrade";
 
               //this is the code that is freezing unity
         while (BitcoinGlobal.BitcoinCount <= RAMPRICE) {
             RAM.interactable = false;
             RAMC.interactable = false;
         }
     }
 }
 public void BuyPSU(){
     BitcoinGlobal.BitcoinCount -= PSUPRICE;
     PSUPRICE = PSUPRICE + 200;
     if (PSUUpgrade == PSUMaxUpgrade) {
         PSU.interactable = false;
         PSUC.interactable = false;
     } else
         ++PSUUpgrade;
     if (BitcoinGlobal.BitcoinCount <= PSUPRICE) {
         Error.GetComponent<Text> ().text = "You don't have " + PSUPRICE + " for buying this upgrade";
 
               //this is the code that is freezing unity
         while (BitcoinGlobal.BitcoinCount <= PSUPRICE) {
             PSU.interactable = false;
             PSUC.interactable = false;
         }
     }
 }
 public void BuyFAN(){
     BitcoinGlobal.BitcoinCount -= FANPRICE;
     FANPRICE = FANPRICE + 100;
     if (FANUpgrade == FANMaxUpgrade) {
         FAN.interactable = false;
         FANC.interactable = false;
     } else
         ++FANUpgrade;
     if (BitcoinGlobal.BitcoinCount <= FANPRICE) {
         Error.GetComponent<Text> ().text = "You don't have " + FANPRICE + " for buying this upgrade";
 
               //this is the code that is freezing unity
         while (BitcoinGlobal.BitcoinCount <= FANPRICE) {
             FAN.interactable = false;
             FANC.interactable = false;
         }
     }
 }
 
               }
Answer by Getsumi3 · Oct 04, 2019 at 11:03 AM
Well. I presume that it is freezing because you are starting a while loop and this loop never ends.
Just change your while statement to an if statement like this:
 if(BitcoinGlobal.BitcoinCount <= FANPRICE) {
              FAN.interactable = false;
              FANC.interactable = false;
          }
 
              Your answer
 
             Follow this Question
Related Questions
Whole computer tanks while starting Unity games. 0 Answers
Hundreds off errors n console upon starting Unity 2018.3.9f1 related to "has no meta file" 0 Answers
Massive (>1sec) lag spikes in game, within 10 seconds of starting 1 Answer
Unity freezes after editing code (Visual Studio) 0 Answers
Unity is freezing when I change my script, what can I do? [SOLVED] 1 Answer