Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二进制格式化程序保存加载但不购买_C#_Unity3d_Binary_Formatter - Fatal编程技术网

C# 二进制格式化程序保存加载但不购买

C# 二进制格式化程序保存加载但不购买,c#,unity3d,binary,formatter,C#,Unity3d,Binary,Formatter,我使用二进制格式化程序来保存游戏变量的数据。它可以很好地节省高分、硬币和装载。但当玩家有10枚硬币时,我希望他能够购买一些物品。它正在完善编辑器。但在android设备中,它不起作用。但同样,它是保存和加载硬币和高分。这是我的密码: 游戏控制器类 [SerializeField] private Text coinText,highScoreText; public static GameController instance; public GameData data; public int

我使用二进制格式化程序来保存游戏变量的数据。它可以很好地节省高分、硬币和装载。但当玩家有10枚硬币时,我希望他能够购买一些物品。它正在完善编辑器。但在android设备中,它不起作用。但同样,它是保存和加载硬币和高分。这是我的密码:

游戏控制器类

[SerializeField]
private Text coinText,highScoreText;

public static GameController instance;
public GameData data;
public int currentLevel;
public int currentScore;

public bool isGameStartedFirstTime;
public bool isMusicOn;
public int selectedLevel;
public int coins;
public int highScore;
public bool[] levels;

void Awake () 
{
    MakeSingleton();
    InitializeGameVariables();
    coinText.text=data.getCoins().ToString ();
    highScoreText.text = data.getHighScore().ToString ();
}

void MakeSingleton()
{
    if(instance!=null)
        Destroy (gameObject);
    else
    {
        instance=this;
        DontDestroyOnLoad(gameObject);
    }
}
void InitializeGameVariables()
{
    Load ();
    if(data!=null)
    {
        isGameStartedFirstTime=data.getIsGameStartedFirstTime();
    }
    else
    {
        isGameStartedFirstTime=true;
    }
    if(isGameStartedFirstTime)
    {
        highScore=0;
        coins=0;
        selectedLevel=0;
        isGameStartedFirstTime=false;
        isMusicOn=false;
        levels = new bool[7];

        levels[0] = true;
        for(int i = 1; i<levels.Length;i++)
        {
            levels[i] = false;
        }

        data = new GameData();
        data.setHighScore(highScore);
        data.setCoins(coins);
        data.setIsGameStartedFirstTime(isGameStartedFirstTime);
        data.setLevels(levels);
        data.setMusicOn(isMusicOn);
        data.setSelectedLevel(selectedLevel);

        Save ();
        Load ();
    }
    else
    {
        highScore=data.getHighScore();
        coins = data.getCoins();
        isGameStartedFirstTime = data.getIsGameStartedFirstTime();
        levels=data.getLevels();
        isMusicOn=data.getMusicOn();
        selectedLevel=data.getSelectedLevel();
    }
}
public void  Save()
{
    FileStream file = null;
    try
    {
        BinaryFormatter bf = new BinaryFormatter();
        file = File.Create(Application.persistentDataPath + "/GameData.dat");
        if(data!=null)
        {
            data.setHighScore(highScore);
            data.setCoins(coins);
            data.setIsGameStartedFirstTime(isGameStartedFirstTime);
            data.setLevels(levels);
            data.setMusicOn(isMusicOn);
            data.setSelectedLevel(selectedLevel);

            bf.Serialize(file,data);
        }
    }
    catch(Exception e)
    {

    }
    finally
    {
        if(file!=null)
        file.Close();
    }
}
public void Load()
{
    FileStream file = null;

    try
    {
        BinaryFormatter bf = new BinaryFormatter();

        file = File.Open(Application.persistentDataPath + "/GameData.dat",FileMode.Open);
        data = (GameData)bf.Deserialize(file);
    }
    catch(Exception e)
    {

    }
    finally
    {
        if(file!=null)
            file.Close();
    }
}
这是我的购买代码:

public void BuyItem(int index)
{
    if(GameController.instance.levels[index]==true)
    {
        Application.LoadLevel ("Zombies");
    }
    else
    {
        if(GameController.instance.coins>=10)
        {
            BuyImages[index-1].SetActive (false);
            GameController.instance.levels[index]=true;
            GameController.instance.coins-=10;
            coinsText.text="" + GameController.instance.coins;
            GameController.instance.Save ();

        }
    }

}

它在编辑器上工作,但在设备上不工作,尽管保存数据有效。

请仅发布与您的问题/问题直接相关的代码。这些代码已经相关。其中一个用于保存数据,另一个用于购买。再想一想,我猜InitializeGameVariables方法中的GameStartedFirstTime变量永远不会实现。因为当我将coins变量更改为其他数字时,它仍然保持为0。但是,如果“改变”第一次启动时为true,那么它就起作用了。但当然,应用程序每次都会思考,所以会重置变量。您遇到了什么错误?请说得更具体些。你还没问问题,我已经解决了。我想问的是,为什么buy按钮没有完成它的工作,尽管数据变量加载非常完美。我刚把公开的游戏数据改成了私人的。我不知道这是如何解决问题的,但无论如何,谢谢。
public void BuyItem(int index)
{
    if(GameController.instance.levels[index]==true)
    {
        Application.LoadLevel ("Zombies");
    }
    else
    {
        if(GameController.instance.coins>=10)
        {
            BuyImages[index-1].SetActive (false);
            GameController.instance.levels[index]=true;
            GameController.instance.coins-=10;
            coinsText.text="" + GameController.instance.coins;
            GameController.instance.Save ();

        }
    }

}