Не уменьшается количество денег Unity

Рейтинг: 1Ответов: 1Опубликовано: 21.01.2023

Мне нужно, чтоб при покупке предмета от общих денег отнималась только цена товара, но скрипт не уменьшает значение.

private bool isOpened = false;
public Text moneyText;
public Text lvl;
public int lvlCost = 5;

public void BuyNewLVL()
    {
        int moneyTextInt = int.Parse(moneyText.text);
        if(moneyTextInt >= lvlCost)
        {
            moneyTextInt-=lvlCost;
            moneyText.text = moneyTextInt.ToString();
            int lvlint = int.Parse(lvl.text);
            lvlint++;
            lvl.text = lvlint.ToString(); 
            

        }
        else if(moneyTextInt < lvlCost)
        {
            
        }
    }

В чем проблема и как ее исправить?

Ответы

▲ 1Принят

Вы не совсем корректно обновляете moneyText.text.Сначала вы разбираете текст на int, а затем вычитаете из него lvlCost. Разумеется, это не будет обновлять moneyText.text. Проще всего обновить moneyText.text после вычитания:

moneyText.text = (moneyTextInt - lvlCost).ToString();

Дополнительно укажите в else if, что вы хотите сделать, если у игрока мало денег.

else if(moneyTextInt < lvlCost)
{
    //Не хватает денег
}

Можно ещё проверить, больше ли значение moneyTextInt или равно lvlCost, прежде чем вычитать lvlCost из moneyTextInt.

int moneyTextInt = int.Parse(moneyText.text);
if (moneyTextInt >= lvlCost)
{
   moneyText.text = (moneyTextInt - lvlCost).ToString();
   int lvlint = int.Parse(lvl.text);
   lvlint++;
   lvl.text = lvlint.ToString(); 
}
else
{
    //Не хватает денег
}

Ещё можно попробовать int.TryParse() вместо int.Parse(), т.к. int.Parse() выдает исключение, когда входные данные не могут быть проанализированы, в то время как TryParse возвращает false

int moneyTextInt;
if (int.TryParse(moneyText.text, out moneyTextInt))
{
   if (moneyTextInt >= lvlCost)
   {
       moneyText.text = (moneyTextInt - lvlCost).ToString();
       int lvlint;
       if(int.TryParse(lvl.text, out lvlint))
       {
           lvlint++;
           lvl.text = lvlint.ToString(); 
       }
   }
   else
   {
       //Не хватает денег
   }
}

Может мой ответ вам поможет.