无法将播放器数据保存在Update()方法中的二进制文件中

我试图在Application.persistenceDataPath的二进制文件中保存玩家的生命。 我写了一个方法来存储玩家的生活:

public void SaveLife() { BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Open (Application.persistentDataPath + "/playerInfo.dat", FileMode.Open); PlayerData data = new PlayerData (); data.savedLife = life; bf.Serialize (file, data); file.Close (); } 

问题是,当SaveLife()被称为OnApplicationQuit它的作品。 相反,如果我在一个类的Update()方法中调用它,它不起作用。

当某个事件被触发时,Update()方法被调用:

 void Update() { if (life < 20) { if (//certain event is triggered) { SaveLife(); } lifeTimer -= Time.deltaTime; if (lifeTimer <= 0) { ResetLife (); } } } 

数据的容器类是

 [Serializable] class PlayerData { public int savedLife; } 

可能是什么问题呢?

问题是由同一个脚本写入同一个文件“playerInfo.dat”的另一个SaveTime()方法造成的。

 public void SaveTime() { BinaryFormatter bf = new BinaryFormatter (); FileStream file = File.Open (Application.persistentDataPath + "/playerInfo.dat", FileMode.Open); PlayerData data = new PlayerData (); data.savedTime = DateTime.Now; bf.Serialize (file, data); file.Close (); } 

由于在SaveTime()我再次实例化Player data ,这似乎导致由Update()创建的旧的Player data被replace。

我通过在脚本的主体中仅实例化一次Player date来解决问题。