如何将bool保存到PlayerPrefs Unity

时间:2016-12-10 07:31:13

标签: c# unity3d save payment

我的游戏设置付款系统是我的代码:

 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;
     }
 }

现在,每当玩家在游戏中购买东西时,我的3个按钮的难以处理就变为真实;但问题是每次他关闭游戏时,难以解决的问题都会回到虚假状态。

我应该保存这个过程,以便播放器不必再次购买以将它们设置为真吗?

5 个答案:

答案 0 :(得分:2)

PlayerPrefs没有布尔类型的重载。它只支持string,int和float。

您需要创建一个功能,将true转换为1false转换为0,然后转换PlayerPrefs.SetIntPlayerPrefs.GetInt重载需要int类型。

这样的事情:

int boolToInt(bool val)
{
    if (val)
        return 1;
    else
        return 0;
}

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

现在,您可以轻松地将bool保存到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));
}

如果要保存许多变量,请使用Json和PlayerPrefs,而不是单独保存和加载它们。 Here是如何做到的。

答案 1 :(得分:2)

这要快得多

var foo = true;
// Save boolean using PlayerPrefs
PlayerPrefs.SetInt("foo", foo?1:0);
// Get boolean using PlayerPrefs
foo = PlayerPrefs.GetInt("foo")==1?true:false;

来自here

的来源

答案 2 :(得分:0)

我之所以写这个答案,是因为有些人还需要这个答案,我认为这比上面的其他人要容易得多。

要保存:

PlayerPrefs.SetInt("Mute_FX", mute ? 1 : 0);

要加载:

PlayerPrefs.GetInt("Mute_FX") == 1 ? true : false;

如果您不了解所发生的情况,建议您阅读有关C#中的三元运算符的信息。

编辑:我没有看到穆罕默德·萨利赫(Mohamed Saleh)的回答,但这是相同的。

答案 3 :(得分:0)

写作:

bool val = true;
PlayerPrefs.SetInt("PropName", val ? 1 : 0);
PlayerPrefs.Save();

阅读:

bool val = PlayerPrefs.GetInt("PropName") == 1 ? true : false;

答案 4 :(得分:0)

也很流畅

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

private bool IntToBool(int val)
{
    return val == 1;
}