由于某些原因需要将数据保存在本地,并且在某些时候进行编辑并加载,比如保存场景信息,保存游戏状态,保存运行时获得的数据等。
常规的方法有XML,二进制和JSON,前两个不需要通过第三方库实现,缺点是相对繁琐。JSON的好处是数据轻量,过程简单,这次遇到数据保存的需求时,尝试了这三种方法,最终选择了JSON。
导入JSON库
这里使用的是同事推荐的JSON.cs,下载地址。
代码中添加命名空间
using MiniJSON2;
JSON库的使用
public JSON(object jsonKey , object jsonValue)
{
fields.Add(jsonKey.ToString(),jsonValue);
}
JSON数据库的一个关键API是JSON(object Key ,object Value),它类似Dictionary类型,使用方法是将Value与某一个key一一对应。
导出JSON到文件
为了换装,使用的数据结构是Dictionary>,从效果上来说就是希望通过换装部位名称加一个数字,就能得到应有资源的地址,从而用Resources.Load或者www来加载资源。接下来就是思考如何将他们转成JSON数据,开始还想着既然有三个变量,那我应该用三个数据来保存以便以后加载时组合吧,但……嗯想想也是挺傻的,估计是最近感冒了(一定是这样 (´▽`) )。
private void SetJsonData(ref JSON resJson, string key)
{
List res_man = new List();
if (avatarData._avatarResData.ContainsKey(key))//判断key是否存在{
foreach (KeyValuePair i in avatarData._avatarResData[key])
{
res_man.Add(i.Value);
}
resJson[key] = res_man.ToArray();
}
else
Debug.Log(key + "key is none");
Debug.Log(key + " is done=================");
}
这里的avatarData._avatarResData[key]就是之前定义的字典数据,通过遍历avatarData._avatarResData这个字典数据,得到某个key的所有路径数组数据并保存在临时变量res_man里,之后通过resJson[key] = res_man.ToArray();将res_man里的数据赋值给resJson[key],这样得到的JSON数据里即有了[key]也有了与之对应的[value](数组型value)。接下来需要将处理好的JSON数据保存到本