C# 将可编写脚本的对象数组保存到json文件UNITY/C时出现问题#
我试图将一个可编写脚本的对象数组的数据存储到一个序列化的json文件中,当我只保存一个对象时没有问题,但是当我尝试循环并保存所有数组时,它只保存数组中的最后一个。你知道我该怎么解决这个问题吗 C#代码-C# 将可编写脚本的对象数组保存到json文件UNITY/C时出现问题#,c#,file,unity3d,serialization,save,C#,File,Unity3d,Serialization,Save,我试图将一个可编写脚本的对象数组的数据存储到一个序列化的json文件中,当我只保存一个对象时没有问题,但是当我尝试循环并保存所有数组时,它只保存数组中的最后一个。你知道我该怎么解决这个问题吗 C#代码- 公共静态GameSaveManager实例; [SerializeField]private ShopItem[]shopitems; [SerializeField]私有BackgroundShopItem[]backgroundShopItems; 私人空间 { if(实例==null) {
公共静态GameSaveManager实例;
[SerializeField]private ShopItem[]shopitems;
[SerializeField]私有BackgroundShopItem[]backgroundShopItems;
私人空间
{
if(实例==null)
{
实例=此;
}
else if(实例!=此)
{
摧毁(这个);
}
DontDestroyOnLoad(此);
}
公共文件IsSaveFile()
{
返回目录.Exists(Application.persistentDataPath+“game_save”);
}
公共存储游戏()
{
如果(!IsSaveFile())
{
CreateDirectory(Application.persistentDataPath+“/game_save”);
}
如果(!Directory.Exists(Application.persistentDataPath+“/game\u sava/data”))
{
CreateDirectory(Application.persistentDataPath+“/game_save/data”);
}
BinaryFormatter bf=新的BinaryFormatter();
对于(int i=0;i
在循环中for(int i=0;i
将每个文件保存到相同的位置-Application.persistentDataPath+“/game\u save/data/skins\u save.txt”
,因此您可以覆盖文件。只需使用不同的保存文件:Application.persistentDataPath+“/game\u save/data/skins\u save{i}.txt”
如果要将其序列化为一个文件,请考虑为其实现自己的可序列化类,并将您的SuffTea[]数组放在那里。
[Serializable]
public class SaveItems
{
public ShopItem[] shopitems;
}
因此,在SaveGame()中,您将得到如下结果:
public void SaveGame()
{
// previous code here
BinaryFormatter bf = new BinaryFormatter();
SaveItems si = new SaveItems();
si.shopitems = shopitems;
FileStream file = File.Create(Application.persistentDataPath + "/game_save/data/skins_save.txt");
var json = JsonUtility.ToJson(si);
bf.Serialize(file, json);
file.Close();
}
你能澄清一下你是如何通过粘贴代码将项目添加到
ShopItem[]
的吗?@HurpaDerpa ShopItem[]是可编写脚本的对象,我只是在检查中填充数组,你似乎在循环中关闭了文件。。。您想在循环之外关闭它。我刚才尝试了您所说的,但是“{I}”被检测为字符串,只应用于文件名。我做错了什么?我编辑了文章,重新加载以查看它。是的,{i}应用于文件名,但实际上我假设您只想获取一个文件,而不是一堆文件。我对这方面相当陌生,所以让我问一下,最好是为每个shopItem保存一个文件,还是只保存一个文件,其中包含您在编辑回复中提到的所有保存的数据?我认为将所有数据保存在一个位置是一个合理的想法,因为您的数据似乎足够简单,并假装一次加载所有数据。如果你想保存一个臃肿的类或者实现单独的shopItems加载,那么你应该考虑单独保存每个shopItem。但这只是我的意见,我没有足够的经验来考虑我的意见,没有任何线索。谢谢你的回应!而且,如何将数据存储在前面提到的不同文件中?所以我知道两种方法:D
public void SaveGame()
{
// previous code here
BinaryFormatter bf = new BinaryFormatter();
SaveItems si = new SaveItems();
si.shopitems = shopitems;
FileStream file = File.Create(Application.persistentDataPath + "/game_save/data/skins_save.txt");
var json = JsonUtility.ToJson(si);
bf.Serialize(file, json);
file.Close();
}