首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将bool保存到PlayerPrefs Unity

如何将bool保存到PlayerPrefs Unity
EN

Stack Overflow用户
提问于 2016-12-10 15:31:13
回答 5查看 13.5K关注 0票数 3

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

代码语言:javascript
运行
复制
 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个按钮的难易程度就变成了真;但问题是,每次他关闭游戏时,难易程度又回到了假方法。

我是否应该保存这个过程,这样玩家就不需要再次购买才能将它们设置为true?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-10 16:10:20

PlayerPrefs没有布尔类型的重载。仅支持string、int和float。

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

如下所示:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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是如何做到这一点的。

票数 7
EN

Stack Overflow用户

发布于 2018-01-16 22:14:08

这要快得多

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-01-11 07:16:12

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

要保存:

代码语言:javascript
运行
复制
PlayerPrefs.SetInt("Mute_FX", mute ? 1 : 0);

要加载,请执行以下操作:

代码语言:javascript
运行
复制
PlayerPrefs.GetInt("Mute_FX") == 1 ? true : false;

如果您不了解发生了什么,我建议您阅读有关C#中的三元运算符的内容。

编辑:我没有看到穆罕默德·萨利赫的回答,但这是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41073236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档