@ArasI

Почему деньги не вычитаются при покупке из переменной?

Я делаю 2D-игру на Unity 2020.3.30f1 для Android. Сделал магазин, теперь деньги не забираются при покупке, а остаются неизменными, не знаю как что-то сделать при покупке, деньги вычитаются из переменной data.money(script 2). Что я должен делать? Заранее спасибо!

Скрипт 1:(Он хранит деньги)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class ShopAssist : MonoBehaviour
{
    public static int money;
    public Text moneyText;
    public bool isMulti = false;

    void Start()
    {
        money = PlayerPrefs.GetInt("Money");
    }


    void Update()
    {
        moneyText.text = money.ToString();
    }

    public void BuyMulti()
    {
        if (money >= 10 && isMulti == false)
        {
            isMulti = true;
            money -= 10;
            PlayerPrefs.SetInt("Money", money);
            PlayerPrefs.SetInt("isMulti", isMulti ? 1 : 0);
        }
    }

    public bool TryRemoveMoney(int moneyToRemove)
    {
        if (money >= moneyToRemove)
        {
            money -= moneyToRemove;
            return true;
        }
        else
        {
            return false;
        }
    }

}


Скрипт 2:(Не вычитаются деньги при покупке с переменной data.money)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SelectCharacters : MonoBehaviour
{
    SelectCharacters.Data data = new SelectCharacters.Data();
    private int i;

    public GameObject[] AllCharacters;

    public GameObject ArrowToLef;
    public GameObject ArrowToRight;

    public GameObject ButtonBuyCharacter;
    public GameObject ButtonSelectCharacter;
    public GameObject TextSelectCharacter;

    private string statusCheck;
    private int check;

    public ShopAssist script1;
    private int loadedAmount;

    public Text TextPrice;

    [System.Serializable]
    public class Data
    {
        public string currentCharacter = "MainBall";
        public List<string> haveCharacters = new List<string> { "MainBall" };
        public int money;
    }

    private void Start()
    {

        if (PlayerPrefs.HasKey("SaveGame"))
        {
            data = JsonUtility.FromJson<SelectCharacters.Data>(PlayerPrefs.GetString("SaveGame"));
        }
        else
        {
            data.money = 500;
            PlayerPrefs.SetString("SaveGame", JsonUtility.ToJson(data));
        }

        AllCharacters[i].SetActive(true);

        if (data.currentCharacter == AllCharacters[i].name)
        {
            ButtonBuyCharacter.SetActive(false);
            ButtonSelectCharacter.SetActive(false);
            TextSelectCharacter.SetActive(true);
        }
        else if (data.currentCharacter != AllCharacters[i].name)
        {
            StartCoroutine(CheckHaveCharacter());
        }


        if (i > 0)
        {
            ArrowToLef.SetActive(true);
        }

        if (i == AllCharacters.Length)
        {
            ArrowToRight.SetActive(false);
        }
    }

    private void Update()
    {
        data.money = ShopAssist.money;
    }

    public IEnumerator CheckHaveCharacter()
    {
        while (statusCheck != "Check")
        {
            if (data.haveCharacters.Count != check)
            {
                if (AllCharacters[i].name != data.haveCharacters[check])
                {
                    check++;
                }
                else if (AllCharacters[i].name == data.haveCharacters[check])
                {
                    TextSelectCharacter.SetActive(false);
                    ButtonBuyCharacter.SetActive(false);
                    ButtonSelectCharacter.SetActive(true);
                    check = 0;
                    statusCheck = "Check";
                }
            }
            else if (data.haveCharacters.Count == check)
            {
                ButtonSelectCharacter.SetActive(false);
                TextSelectCharacter.SetActive(false);
                ButtonBuyCharacter.SetActive(true);
                TextPrice.text = AllCharacters[i].GetComponent<Item>().priceCharacter.ToString();
                check = 0;
                statusCheck = "Check";
            }
        }
        statusCheck = "";

        yield return null;
    }


    public void SelectCharacter()
    {
        data = JsonUtility.FromJson<SelectCharacters.Data>(PlayerPrefs.GetString("SaveGame"));
        data.currentCharacter = AllCharacters[i].name;
        PlayerPrefs.SetString("SaveGame", JsonUtility.ToJson(data));
        ButtonSelectCharacter.SetActive(false);
        TextSelectCharacter.SetActive(true);
    }

    public void BuyCharacter()
    {
        if (data.money >= AllCharacters[i].GetComponent<Item>().priceCharacter)
        {
            data = JsonUtility.FromJson<SelectCharacters.Data>(PlayerPrefs.GetString("SaveGame"));

            data.money = data.money - AllCharacters[i].GetComponent<Item>().priceCharacter;
            data.haveCharacters.Add(AllCharacters[i].name);

            PlayerPrefs.SetString("SaveGame", JsonUtility.ToJson(data));

            ButtonBuyCharacter.SetActive(false);
            ButtonSelectCharacter.SetActive(true);

        }
    }
}
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
K0TlK
@K0TlK
Буллю людей.
Какой раз ты уже задаешь этот вопрос? Третий? Ты ничему не научишься, если будешь просто копипастить код, который кто-то написал за тебя. Ты где-то нашел код, скопировал его и пытаешься изменить, не понимая того, как все работает.
Ты и не отнимаешь эти деньги из первого скрипта, ты загружаешь данные из json в BuyCharacter, изменяешь их и сохраняешь.
Тебе сюда и сюда
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы