代码基本是复制Sandy老师,存档与读档的代码,可以正常建立存档的Save.json文件,但是读档解析的时候会报错,报错位置我在代码里标注。
报错类型:ArgumentNullException: Argument cannot be null.
我的Save类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Save {
public int Gold;//钱
public int Daily_target;//每日指标
public int Current_pressure;//当前压力
public int Days;//天数
public int MissonCount;
public List<int> CardId = new List<int>();
public List<int> EqitemID = new List<int>();
public List<int> Energy = new List<int>();
public List<List<int>> EqitemSkillID = new List<List<int>>();
public List<int> SkillID = new List<int>();
public List<int> SkillLv = new List<int>();
}
我的SaveJson 方法:
public void SaveGame()
{
Save save = CreatSave();
string filePath = Application.dataPath + "/StreamingAssets" + "/Save.json";
string saveJsonStr = JsonMapper.ToJson(save);
StreamWriter sw = new StreamWriter(filePath);
sw.Write(saveJsonStr);
sw.Close();
Debug.Log("存档成功");
}
我的LoadJson 方法:
public void LoadByJson()
{
string filePath = Application.dataPath + "/StreamingAssets" + "/Save.json";
if (File.Exists(filePath))
{
StreamReader sr = new StreamReader(filePath);
string jsonStr = sr.ReadToEnd();
sr.Close();
Save save = JsonMapper.ToObject<Save>(jsonStr); //报错的位置!!!!!!
LoadGame(save);
sr.Close();
}
else
{
Debug.Log("存档文件不存在");
}
}
我的 CreatSave 方法:
public Save CreatSave()
{
Save save = new Save
{
Gold = GameManger.instance.Gold,
Daily_target = GameManger.instance.Daily_target,
Current_pressure = GameManger.instance.Current_pressure,
Days = GameManger.instance.Days,
MissonCount = Missonmanger.instance.MissonFinshCount
};
foreach (var item in Inventory.instance.GetComponentsInChildren<ItemUI>())
{
save.CardId.Add(item.CardId);
}
foreach (var item in GameManger.instance.eqImage.Eqitemlist)
{
save.EqitemID.Add(item.CardId);
save.Energy.Add(item.EqItemEnergy);
List<int> temp = new List<int>();
foreach (var item1 in item.PersonSkilllist)
{
temp.Add(item1.Id);
}
save.EqitemSkillID.Add(temp);
}
foreach (var item in SkillPanel.instance.SkillUILIst)
{
save.SkillID.Add(item.id);
save.SkillLv.Add(item.Skilllv);
}
return save;
}
我的通过存档建立的 Save.json文件:
{"Gold":0,"Daily_target":1600,"Current_pressure":100,"Days":1,"MissonCount":0,"CardId":[1,5,1,4,5,4,3,2,2,2,1,5],"EqitemID":[3,4,3],"Energy":[100,100,100],"EqitemSkillID":[[10],[21],[25]],"SkillID":[10,21,25],"SkillLv":[1,1,1]}
你可以在报错的那一行下面,打印一下save是不是空的。
报的错是哪一行,不一定就真的是哪一行。
如果它是空的,说明是读取json的代码出了问题。
你可以新创建一个新的脚本,新的场景,只有读取的代码,进行测试。
如果他不是空的,说明是继续往下的代码出了问题。
继续debug。。