教程来源:https://www.youtube.com/watch?v=OyQQ-7-22Hw
------------------------------------------------------
1.读取JSON
1.JSON可以保存什么?
装备数据,字串(包括应用(名称,版本),UI元素(名称,说明),关卡(名称,说明))等。
2.导入LitJson.dll
Unity Assets下新建文件夹Plugins(一般用来存导入的第三方插件),把LitJson.dll拖进来。
3.创建JSON文件
在李三影教程中把JSON文件放在StreamingAssets文件夹(任何在这个文件夹里面的资源都将会不做任何改动的拷贝到发布版文件夹中(除了移动和网页发布包,streamingAssets里面的资源将会打包到一个最终的发布包中),StreamingAssets文件夹的路径虽然在每个平台都不一样,但是可以统一通过Application.streamingAssetsPath获取到)下,该教程中放在Resource文件夹(Resources文件夹允许你在脚本中通过文件路径和名称来访问资源。放在这一文件夹的资源永远被包含进build中,即使它没有被使用)中。
在VS里写JSON比较好对齐,在该教程里用了上面的第一个武器JSON。
4.读取JSON文件
新建C#命名为ReadJson,打开并编辑。
把脚本挂在Main Camera上测试,点击Console会看到已读取的JSON的所有内容(作为string)。
接下来用LitJson读取JSON,继续编辑脚本
可以看到顺利读取了JSON内的数据。
注意,“slug”一般用来通过slug的值(即图片或预制的名称)去匹配相应的sprite或prefab,比如显示装备的图片等。
2.写入JSON
新建C#命名为WriteJson,打开并编辑。
第一步:
第二步:
保存后回到Unity把WriteJson挂Main Camera上测试,可以看到正确的写了一条Json数据。
第三步:把写好的Json数据存到文件里(即Json文件),接着编辑WriteJson
保存后回到Unity测试,可以看到Player.json已经存在了(如果没有的话,在测试状态的情况下右键refresh一下)。
双击在VS里打开Player.json可以看到
样式略丑,我们可以复制Json里的内容到Json Formatter(https://jsonformatter.curiousconcept.com/)调整样式
然后点击右上的复制内容图标,把调整好样式的json粘贴回Player.json(只是为了易读好看)^_^。
3.使用Unity内置JSONUtility
1.GameGrind教程
同样来源于该博主的视频教程
---------------------------------------
新建StreamingAssets文件夹存放JSON文件,因为StreamingAssets类似dictionary,即使项目build了也可以继续在该文件夹里编辑里面的文件。新建json名为creature保存到该文件夹里。随便写点儿内容用来测试。
然后新建脚本JSONDemo来读取JSON并序列化里面的内容。
回到Unity把脚本挂camera上测试,可以看到成功读取到了Name的值
接着来写入json文件
回到Unity测试
如果要实现一种功能:roll到装备就存入装备信息json,即读取json并转换,把新roll到的装备加到json再转换写入。
这分为两种情况:1.在json内已有装备的情况下顺利走上面的流程;2如果是第一次战斗json内没有任何东西,这时候添加就会报错。
要解决第一次战斗的问题,除了用bool值判断json是否为空外,还要重新初始化装备的scriptable object,否则还是会报错。
2.JsonUtility介绍
Unity内置类,用来把Json字符串转换成Unity Object(即Unity内可读可操作的对象,Scriptable Object),或是把对象转换成Json字符串。
注意,只是格式间的转换,文件的读取写入并不在此列。
读取文件是用的
JsonUtility有3个方法
FromJson & FromJsonOverWrite都是把Json字符串转换成Scriptable Object,区别为FromJson将创建一个新的对象来转换这些内容,比如上面教程。FromJsonOverWrite是把转换的内容在一个已存在的Object上改写。
3.把数据写入文件(File方法)
使用File下的write方法相关写入
如此教程中示例:https://jingyan.baidu.com/article/e52e361513e0de40c60c5102.html
分别写入字符串和字符串组以及图片等给不同文件。但上面全是覆盖文件,如果只想写入某行或者在文件尾再添加呢?
4.追加数据到文件(文件尾添加)
参考:
1.StreamWriter类
---------------
另一个例子:
2.File类
3.StringWriter(向字符串写入字符)