我使用Unity 2017并希望序列化保存游戏数据,如下所示:
public void Save(Statistics data)
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath
+ "/playerInfo.dat");
bf.Serialize(file, data);
file.Close();
}
LevelData
类标记为Serializable
,仅包含string
和int
。实现IPersistentData
的类也符合这些要求。
我确实找到了问题并发现我应该在我所做的Awake
方法中设置一个环境变量,但这并没有解决任何问题。我使用 Windows 10 作为操作系统进行开发,但游戏将用于 Android 。
尝试保存时,我总是会遇到此异常
SerializationException:意外的二进制元素:255 System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject(BinaryElement element,System.IO.BinaryReader reader,System.Int64& objectId,System.Object& value,System.Runtime.Serialization.SerializationInfo& info)
欢迎任何形式的建议来解决这个问题。
修改
尝试 Programmer 的提示后更新: 我想要序列化的课程:
[Serializable]
public class Statistics
{
public int LastPlayedLevel;
public Statistics()
{
MusicVolume = 1f;
SFXVolume = 1f;
LevelDatas = new List<LevelData>();
LastPlayedLevel = 1;
}
public float MusicVolume;
public float SFXVolume;
public List<LevelData> LevelDatas;
}
LevelData
:
[Serializable]
public class LevelData
{
public LevelData(int levelNumber,string name)
{
this.LevelNumber = levelNumber;
this.Name = name;
this.BestPercent = 0;
this.DeathCount = 0;
}
public int LevelNumber;
public string Name;
public int BestPercent;
public uint DeathCount;
}