我做了一个背包系统,点击物品的出售按钮,会降低物品的数量,通过可写目录来存物品信息(模拟服务器数据),每次修改物品数量时,都会File.WriteAllText 一次。但问题出现了,我点击出售,可写目录下的json文件可以被修改一次,之后再怎么出售,数量都不会变,必须重新Play一次,才能修改一次,不知道是不是Bug,请各路大神给予指导。File.WriteAllText 在倒数第2行
public class RoleServerData
{
//把数据存到这个变量里
public static JsonData Data;
//模拟服务器的Json数据存取和修改
public static void ReadServerJson(string path)
{
string json = File.ReadAllText(path, Encoding.UTF8);
//Debug.Log(json);
Data = JsonMapper.ToObject(json);//还需要更高MainMenu的C
//这里要注意data是引用传参,其他任何地方修改,都会影响原始数据
}
//修改数据的方法,比如添加和删除
public static void ChangeItemCount(int id, int count)
{
//循环遍历,在[Items]下,修改道具数量,如果道具数量变为0 ,则删除该行
for (int i = 0; i < Data.Count; i++)
{
if (id == (int)Data["Items"][i]["ItemID"])
{
int newCount = (int)Data["Items"][i]["Count"] + count;
Debug.Log(newCount);
if (newCount == 0)
{
//因为JSON支持null,因此不能删除数据
//把原始数据存出来
string old = Data["Items"].ToJson();
//再把数据清空
Data["Items"] = new JsonData();
//再把另一个jsondata存数据,并进行遍历
JsonData newData = JsonMapper.ToObject(old);
//遍历让Data重新装入每个道具信息,让ID相同的道具跳过
for (int j = 0; j < newData.Count; j++)
{
//如果id 相同跳过
if ((int)newData[j]["ItemID"] == id)
{
continue;
}
//把每个道具的数据重新装回Data
Data["Items"].Add(newData[j]);
}
break;//如果进入了这个if,就跳出循环,避免后面的代码执行
}
else
{
Data["Items"][i]["Count"] = newCount;
Debug.Log((int)Data["Items"][i]["Count"]);
}
break;//如果已修改好了道具数量,就跳出循环,避免后面的代码执行
}
}
//把data重新写入到模拟服务器中s
File.WriteAllText(Config.rolePath, Data.ToJson(), Encoding.UTF8);
Debug.Log(Data["Items"].ToJson());
}
补充一下,点击出售时,View下数量会减少,但是json文件中的数量只减少一次。重新play后,数量又变为少一次的数量。比如10个奶酪,点了三下出售,View显示为7,但是重新play后,奶酪会变成9,仅为第一次出售所剩的数量。
不知道是否存在缓存问题,导致你每次读的数据,都是原数据而不是修改后的数据。