- Home /
Question by
Davidbillmanoy · Jun 28, 2021 at 03:26 PM ·
bugcarselectshop
Car Select/Shop Bug
Hello! I have a bug in the car select/shop: The bug is, after I buy the car, I press either left or right, but when I go back to the car I bought, it says Buy again. Here are some of my scripts:
Coins Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Coins : MonoBehaviour
{
public Text coinsText;
public GameObject buyBtn;
public GameObject okBtn;
public GameObject noCoinsScreen;
static Dictionary<string, int> carPrices = new Dictionary<string, int>();
// Start is called before the first frame update
void Start()
{
//PlayerPrefs.DeleteAll();
if(PlayerPrefs.HasKey("coins")==false)
PlayerPrefs.SetInt("coins", 100);
if(PlayerPrefs.HasKey("car2Lock")==false)
{
PlayerPrefs.SetString("car2Lock", "true");
}
if (PlayerPrefs.HasKey("car3Lock") == false)
{
PlayerPrefs.SetString("car3Lock", "true");
}
coinsText.text = "Coins" + ":" + " " + PlayerPrefs.GetInt("coins");
if (carPrices.ContainsKey("Car2") == false)
carPrices.Add("Car2", 100);
if (carPrices.ContainsKey("Car3") == false)
carPrices.Add("Car3", 200);
}
public void BuyCar()
{
int currentcoins = PlayerPrefs.GetInt("coins");
if(currentcoins>=carPrices[Options.getCar()])
{
currentcoins = currentcoins - carPrices[Options.getCar()];
PlayerPrefs.SetInt("coins", currentcoins);
coinsText.text = "Coins" + ":" + " " + PlayerPrefs.GetInt("coins");
PlayerPrefs.SetString(Options.getCar()+"Lock", "false");
buyBtn.SetActive(false);
okBtn.SetActive(true);
}
else
{
StartCoroutine(showNoCoins());
}
}
IEnumerator showNoCoins()
{
noCoinsScreen.SetActive(true);
yield return new WaitForSeconds(1);
noCoinsScreen.SetActive(false);
}
// Update is called once per frame
void Update()
{
}
}
Select Car Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SelectCar : MonoBehaviour
{
public GameObject[] cars;
static int index = 1;
public GameObject okBtn;
public GameObject buyBtn;
// Start is called before the first frame update
void Start()
{
}
public static void resetIndex()
{
index = 1;
}
public void nextCar()
{
index = index + 1;
if(index == 2)
{
foreach(GameObject car in cars)
{
car.SetActive(false);
}
cars[1].SetActive(true);
Options.setCar("Car2");
if(PlayerPrefs.GetString("car2Lock")=="false")
{
okBtn.SetActive(true);
buyBtn.SetActive(false);
}
else
{
okBtn.SetActive(false);
buyBtn.SetActive(true);
}
}
else if (index == 3)
{
foreach (GameObject car in cars)
{
car.SetActive(false);
}
cars[2].SetActive(true);
Options.setCar("Car3");
if (PlayerPrefs.GetString("car3Lock") == "false")
{
okBtn.SetActive(true);
buyBtn.SetActive(false);
}
else
{
okBtn.SetActive(false);
buyBtn.SetActive(true);
}
}
else
{
index = 3;
}
}
public void previousCar()
{
index = index - 1;
if(index==1)
{
foreach (GameObject car in cars)
{
car.SetActive(false);
}
cars[0].SetActive(true);
Options.setCar("Car1");
okBtn.SetActive(true);
buyBtn.SetActive(false);
}
else if (index == 2)
{
foreach (GameObject car in cars)
{
car.SetActive(false);
}
cars[1].SetActive(true);
Options.setCar("Car2");
if (PlayerPrefs.GetString("car2Lock") == "false")
{
okBtn.SetActive(true);
buyBtn.SetActive(false);
}
else
{
okBtn.SetActive(false);
buyBtn.SetActive(true);
}
}
else
{
index = 1;
}
}
}
Comment
Your answer
Follow this Question
Related Questions
WheelCollider Spring bug 0 Answers
Unity Bug when I press play 1 Answer
Unity 5 Car WheelCollider Acceleration Issue 1 Answer
3D Text Mesh : Font Texture change to a Blank (Black) On Project Save 1 Answer
Are y-axis wheelcolliders possible? 1 Answer