Unity中的PlayerPrefs无法正确更改

时间:2019-06-16 23:22:39

标签: c# unity3d

我是Unity的新手,所以如果您认为这不是足够的代码或一个非常简单的错误,请不要感到烦恼。因此,我有一个按钮,显示“自动重启”。当我单击它时,它应该从false变为true。它不是。这是屏幕截图和代码。谢谢!告诉我是否需要更多代码,但我认为您不需要。

之前:

enter image description here

点击自动重启:false后,它应该已经变为自动重启:true

这是一些代码

using UnityEngine;
using UnityEngine.UI;
public class manageautorestart : MonoBehaviour {
    public Text text;
    void Start(){
        if (PlayerPrefs.HasKey ("autorestart")) {
            text.text = "Autorestart: " + PlayerPrefs.GetString ("autorestart");
        } else {
            PlayerPrefs.SetString ("autorestart", "false");
            text.text = "Autorestart: " + PlayerPrefs.GetString ("autorestart");
        }
    }
    public void Change(){

        if (PlayerPrefs.GetString ("autorestart") == "false") {
            PlayerPrefs.SetString ("autorestart", "true");
        }
        if (PlayerPrefs.GetString ("autorestart") == "true") {
            PlayerPrefs.SetString ("autorestart", "false");
        } else {
            PlayerPrefs.SetString ("autorestart", "false");
        }

        PlayerPrefs.Save ();
    }
    void FixedUpdate(){
        PlayerPrefs.Save ();
        text.text = "Autorestart: " + PlayerPrefs.GetString ("autorestart");
    }
}

1 个答案:

答案 0 :(得分:2)

我的第一选择不是使用字符串来存储布尔值。

您可以使用:

public class manageautorestart : MonoBehaviour 
{
    public Text text;
    void Start()
    {
        SetText();
    }
    public void Change()
    {
        bool autorestart = GetAutorestart();
        // flip the value 
        autorestart = !autorestart;
        SetAutorestart(autorestart );
        SetText();
    }

    private bool GetAutorestart()
    {
        // Get stored value, 0 if none
        int temp = PlayerPrefs.GetInt("autorestart", 0);
        // convert 0/1 to false/true
        autorestart = (temp == 1) ? true : false;
        return autorestart;
    }

    private void SetAutorestart(bool value)
    {
        // store it as int
        PlayerPrefs.SetInt("autorestart", value ? 1 : 0);
    }

    private void SetText()
    {
        text.text = "Autorestart: " +  GetAutorestart();
    }
}

您现在有了三种不同的方法来设置/获取值并将其放置在文本中。 Change方法同时使用了这三个方法。