【发布时间】:2021-02-13 03:00:56
【问题描述】:
我正试图弄清楚您将如何保存和加载数据列表。我已经让我的代码可以处理单个数据,但不确定列表如何工作。我有一个 Character 类,这意味着我可以拥有多个角色,并且我想保存每个角色的 hp、mana 等。
//SaveManager class that I can call from anywhere to save and load
public static class SaveManager
{
//SAVE
public static void Save(Character c)
{
BinaryFormatter formatter = new BinaryFormatter();
string path = Application.persistentDataPath + "/Save.save";
FileStream stream = new FileStream(path, FileMode.Create);
PartyData data = new PartyData(c);
formatter.Serialize(stream, data);
stream.Close();
}
//LOAD
public static PartyData Load()
{
string path = Application.persistentDataPath + "/Save.save";
if (File.Exists(path))
{
BinaryFormatter formatter = new BinaryFormatter();
FileStream stream = new FileStream(path, FileMode.Open);
PartyData data = formatter.Deserialize(stream) as PartyData;
stream.Close();
return data;
}
else
{
Debug.Log("Save FIle not Found");
return null;
}
}
}
PartyData 类是我用来保存字符数据的类。
[System.Serializable]
public class PartyData
{
public int hp;
public PartyData(Character cParty)
{
hp = cParty.HP;
}
}
包含统计信息等的字符类
public class Character
{
public int HP { get; set; }
public int Mana { get; set; }
}
最后我有一个附加到游戏对象的 CharacterParty 类,这个类包含多个角色并调用 Save 和 Load 函数:
public class CharacterParty : MonoBehaviour
{
[SerializeField] List<Character> characters;
public List<Character> Characters
{
get
{
return characters;
}
}
public void SaveParty()
{
SaveManager.SaveMC(characters[0]);
}
public void LoadParty()
{
PartyData data = SaveManager.LoadMC();
characters[0].HP = data.hp;
}
}
现在出于测试目的,我尝试在索引 0 处仅保存和加载角色的 hp,它可以工作,但现在我想保存多个角色的 hp 和法力等列表。我只是不知道该列表如何与序列化一起使用保存和加载。我的代码可能需要一些更改才能使列表正常工作,所以我希望有人可以帮助我举个例子。
【问题讨论】:
-
请使用正确的标签...
unityscript是或更好曾经是一种 JavaScript 风格,类似于早期 Unity 版本中使用的自定义语言,现在早已弃用...你的代码显然是c#
标签: c# unity3d serialization deserialization