Search code examples
c#unity-game-enginesavepayment

How to save bool to PlayerPrefs Unity


I have a payment system for my game set up here's my code :

 void Start()
 {
     T55.interactable = false;
     Tiger2.interactable = false;
     Cobra.interactable = false;
 }

 public void ProcessPurchase (ShopItem item)
 {
     if(item .SKU =="tank")
     {
         StoreHandler .Instance .Consume (item );
     }
 }

 public void OnConsumeFinished (ShopItem item)
 {
     if(item .SKU =="tank")
     {
         T55.interactable = true;
         Tiger2.interactable = true;
         Cobra.interactable = true;
     }
 }

Now each time the player buy something in the game the intractability of my 3 buttons goes to true; but the problem is each time he closes the game the intractability goes back to false how.

Should I save the process so the player doesn't have to buy again to set them back to true?


Solution

  • PlayerPrefs does not have an overload for a boolean type. It only supports string, int and float.

    You need to make a function that converts true to 1 and false to 0 then the the PlayerPrefs.SetInt and PlayerPrefs.GetInt overload that takes int type.

    Something like this:

    int boolToInt(bool val)
    {
        if (val)
            return 1;
        else
            return 0;
    }
    
    bool intToBool(int val)
    {
        if (val != 0)
            return true;
        else
            return false;
    }
    

    Now, you can easily save bool to PlayerPrefs.

    void saveData()
    {
        PlayerPrefs.SetInt("T55", boolToInt(T55.interactable));
        PlayerPrefs.SetInt("Tiger2", boolToInt(T55.interactable));
        PlayerPrefs.SetInt("Cobra", boolToInt(T55.interactable));
    }
    
    void loadData()
    {
        T55.interactable = intToBool(PlayerPrefs.GetInt("T55", 0));
        Tiger2.interactable = intToBool(PlayerPrefs.GetInt("Tiger2", 0));
        Cobra.interactable = intToBool(PlayerPrefs.GetInt("Cobra", 0));
    }
    

    If you have many variables to save, use Json and PlayerPrefs instead of saving and loading them individually. Here is how to do that.