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