Как сохранить состояние GameObject в PlayerPrefs?

Всем привет. Бьюсь уже второй день над такой задачей, есть у меня магазин предметов в игре, при покупке предмета он отображается у игрока и вроде бы всё хорошо, но данные о покупке не сохраняются, то есть после перезапуска сцены всё возвращается в исходное положение. Так вот суть вопрос как можно сохранить состояние GameObject, а именно кнопки в PlayerPrefs? Никак не могу перевести bool в int. Я новичок в программировании, если не сложно, то опишите пожалуйста ваш код. Свой код прилагается. Буду безмерно благодарен, если сможете мне помочь! Пробовал такой способ: в Старте Buybutton.SetActive(PlayerPrefs.GetInt("Buybutton", 0) == 1); В Save PlayerPrefs.SetInt("Buybutton", 1); к сожалению, но работало всё не так как надо, значение кнопки сохранялось, но она не убиралась при нажатии, либо я криворукий(склоняюсь ко второму варианту) :)

public Image[] Guns;
public GameObject shop;
public GameObject game;
public GameObject Buybutton;

public Text Coins;

public Button buttons;
public int[] price;

void Start()
{
    Guns[PlayerPrefs.GetInt("g")].color = Color.white;
}

public void Update() 
{
    if (shop.activeSelf == true && Input.GetKeyDown(KeyCode.Escape))
    {
        shop.SetActive(false);
    }
    else if (game.activeSelf == true && Input.GetKeyDown(KeyCode.Escape))
    {
        game.SetActive(false);
    }

    Coins.text = PlayerPrefs.GetInt("coinsFinal").ToString();
}

public void OnClickShop() 
{
    shop.SetActive(true);
}

public void OnClickPlay() 
{
    game.SetActive(true);
}

public void Arena()
{
    SceneManager.LoadScene(2);
}

public void NewGame() 
{
    SceneManager.LoadScene(1);
}

public void Exit() 
{
    Application.Quit();
}

public void gunChanger(int gun) 
{
    PlayerPrefs.SetInt("g", gun);
    PlayerPrefs.Save();
    switch (gun) 
    {
        case 0:
            Guns[gun].color = Color.white;
            Guns[gun + 1].color = Color.black;
        break;
        case 1:
            Guns[gun].color = Color.white;
            Guns[gun - 1].color = Color.black;
        break;
    }
}

public void OnBuyClick() 
{
    if(PlayerPrefs.GetInt("coinsFinal") >= price[1])
    {
        Buybutton.SetActive(false);
        buttons.interactable = true;
        PlayerPrefs.SetInt("coinsFinal", PlayerPrefs.GetInt("coinsFinal") - price[1]);
        PlayerPrefs.Save();
    }
}

Ответы (1 шт):

Автор решения: Andrew

Никак не могу перевести bool в int.

int boolToInt(bool val)
{
   return val ? 1 : 0;
}

bool intToBool(int val)
{
    return val != 0;
}

использование:

//пишем
PlayerPrefs.SetInt("Buybutton", boolToInt(true) ); 
//читаем
intToBool( PlayerPrefs.GetInt("Buybutton") );

ИЛИ воспользуйся враппером на плеерПрефс: http://wiki.unity3d.com/index.php/ArrayPrefs2?_ga=2.125808264.388256789.1608229055-1076981534.1607298619

→ Ссылка