unity3d 如何将bool保存到PlayerPrefs Unity

irtuqstp  于 2023-01-05  发布在  其他
关注(0)|答案(6)|浏览(198)

我有一个支付系统为我的游戏设置这里是我的代码:

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个按钮都会变成真的;但问题是每次他关闭游戏的棘手回到虚假如何。
我是否应该保存该过程,以便玩家不必再次购买来将它们设置为真?

gk7wooem

gk7wooem1#

PlayerPrefs没有布尔类型的重载。它只支持string、int和float。
您需要创建一个函数,将true转换为1,将false转换为0,然后创建接受int类型的PlayerPrefs.SetIntPlayerPrefs.GetInt重载。
大概是这样的

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是如何做到这一点的。

yk9xbfzb

yk9xbfzb2#

这样快多了

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

ac1kyiln

ac1kyiln3#

我写这个答案是因为还有人需要这个答案,我认为比上面的其他人更容易。
要保存:

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

要加载:

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

如果你不明白发生了什么,我建议你阅读有关三元运算符在C#.
编辑:我没有看到穆罕默德·萨利赫回答,但这是一样的。

n53p2ov0

n53p2ov04#

写作:

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

阅读:

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

5tmbdcev5#

同样光滑

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

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

hgc7kmma6#

我不知道为什么有人不建议使用 Package 器,因为这将是一种更干净的扩展PlayerPrefs的方式。

public class PlayerPrefsWrapper : PlayerPrefs
{
    public static void SetBool(string key, bool value)
    {
        SetInt(key, value ? 1 : 0);
    }

    public static bool GetBool(string key)
    {
        return GetInt(key) == 1;
    }
}

用这个你可以写

using PlayerPrefs = PlayerPrefsWrapper;

PlayerPrefs.SetBool("key",true);
bool value = PlayerPrefs.GetBool("key");

相关问题