Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将可编写脚本的对象数组保存到json文件UNITY/C时出现问题#_C#_File_Unity3d_Serialization_Save - Fatal编程技术网

C# 将可编写脚本的对象数组保存到json文件UNITY/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) {

我试图将一个可编写脚本的对象数组的数据存储到一个序列化的json文件中,当我只保存一个对象时没有问题,但是当我尝试循环并保存所有数组时,它只保存数组中的最后一个。你知道我该怎么解决这个问题吗

C#代码-

公共静态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();

}