Unity中通过LitJson插件进行JSON的存档和读档
写在开头
在Unity中,利用JSON进行存档和读档时,是否需要首先在Assets导入LitJson.dll文件,并不直接取决于Unity的某个特定版本。这个需求更多地与项目对JSON处理库的选择和依赖有关。
LitJson是一个流行的Unity插件,它可以方便、快速地进行JSON和对象之间的转换,适用于Unity的多个版本。然而,Unity自身并不直接提供LitJson作为其内置的一部分,因此,如果你的项目需要使用LitJson来进行JSON的序列化与反序列化,你需要手动将这个插件导入到你的Unity项目中。
关于Unity版本与LitJson的兼容性,通常情况下,较新版本的Unity能够很好地支持LitJson,因为LitJson作为一个成熟的插件,其开发者会不断更新以兼容新的Unity版本。然而,具体的兼容性情况可能会因Unity版本更新和LitJson插件版本的不同而有所变化。
在Unity中导入LitJson.dll脚本的步骤如下:
1、下载LitJson的最新版本DLL文件。可以从官方网站、GitHub或其他可靠的资源下载。
2、在Unity编辑器中,将下载的LitJson.dll文件放置到项目的Assets/Plugins目录下。如果Plugins目录不存在,你需要手动创建它。
3、在Unity的脚本中,使用using LitJson;来引入LitJson命名空间,然后就可以使用LitJson提供的JSONMapper类或其他相关类来进行JSON的序列化与反序列化了。
需要注意的是,虽然LitJson是一个流行的选择,但Unity社区也提供了其他多种JSON处理库,如内置的JsonUtility(Unity 5之后也就是2018.1版本之后提供)、Newtonsoft.Json(即Json.NET,一个功能强大的JSON处理库)等。你可以根据项目需求和个人喜好来选择合适的库。
综上所述,利用JSON做存档和读档之前导入LitJson.dll文件的需求,并不直接对应Unity的某个特定版本,而是取决于项目对JSON处理库的选择和依赖。
一、在利用JSON做存档和读档之前,首先要在Assets/Plugins目录下导入一个文件!这个文件就是LitJson.dll

二、然后在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的位置以及类型、游戏射击总数量、游戏得分等数据,Save脚本的代码如下(这个脚本是不能挂载在场景中的游戏物体上,因为这个类没有继承自MonoBehaviour行为类):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//串行化,串行化是指存储和获取磁盘文件、内存或其他地方中的对象。
[System.Serializable]
public class Save {
public List<int> livingTargetPosition = new List<int>();
public List<int> livingMonsterTypes = new List<int>();
public int shootNum = 0;
public int score = 0;
}
三、然后再创建一个脚本GameManager,并放置以下的方法:
这个方法的作用是保存游戏状态的一些信息,比如是怪物的坐标以及游戏场景中的分数
//创建Save对象并存储当前游戏状态信息
private Save CreateSaveGO()
{
//新建Save对象
Save save = new Save();
//遍历所有的Target
//如果其中有激活状态的怪物,就把该target的位置信息和激活状态的怪物的类型添加到List中
//targetGOs是存储游戏中所有怪物的一个一维数组
foreach (GameObject targetGO in targetGOs)
{
TargetManager targetManager = targetGO.GetComponent<TargetManager>();
//当这个数组中某一个元素中有怪物的时候
if(targetManager.target != null)
{
save.livingTargetPosition.Add(targetManager.targetPosition);
int type = targetManager.target.GetComponent<MonsterManager>().monsterType;
save.livingMonsterTypes.Add(type);
}
}
//把shootNum和socre保存到Save对象中
save.shootNum = UIManager._instance.shootNum;
save.score = UIManager._instance.scoreNum;
//返回Save对象
return save;
}
四、下面就是重点来了,开始JSON的存档和读档部分!
JSON的存档方法:
private void SaveByJson()
{
//序列化过程(将Save对象转换为字节流)
//创建Save对象并保存当前游戏状态
Save save = CreateSaveGO();
//定义字符串filePath保存文件路径信息(就是在Assets中创建的一个文件夹名称为StreamFile,然后系统会给我创建一个byJson.json用于保存游戏信息)
string filePath = Application.dataPath + "/StreamFile" + "/byJson.json";
//利用JsonMapper将save对象转换为Json格式的字符串(这里要引入命名空间using LitJson)
string saveJsonStr = JsonMapper.ToJson(save);
//将这个字符串写入到文件中
//创建一个StreamWriter,并将字符串写入到文件中
StreamWriter sw = new StreamWriter(filePath);
sw.Write(saveJsonStr);
//关闭StreamWriter
sw.Close();
//如果保存成功,在游戏场景中显示相应的文字信息
UIManager._instance.ShowMessages("保存成功");
}
JSON的读档方法:
private void LoadByJson()
{
//定义字符串filePath读取文件路径信息(就是在Assets中读取一个文件夹名称为StreamFile里面的一个byJson.json保存游戏信息的文档)
string filePath = Application.dataPath + "/StreamFile" + "/byJson.json";
//判断要读取的游戏文档信息是否存在
if (File.Exists(filePath))
{
//创建一个StreamReader,用来读取流
StreamReader sr = new StreamReader(filePath);
//将读取到的流赋值给jsonStr
string jsonStr = sr.ReadToEnd();
//关闭
sr.Close();
//将字符串jsonStr转换为Save对象
Save save = JsonMapper.ToObject<Save>(jsonStr);
//调用激活怪物以及更新分数的UI方法
SetGame(save);
//把文字框里面的内容清空掉
UIManager._instance.ShowMessages("");
}
else
{
UIManager._instance.ShowMessages("存档文件不存在");
}
}
五、根据读出的信息,进行激活怪物,以及更新场景分数UI的SetGame方法:
private void SetGame(Save save)
{
//先将所有的target里面的怪物清空,并重置所有的计时
foreach (GameObject targetGo in targetGOs)
{
targetGo.GetComponent<TargetManager>().UpdateMonsters();
}
//通过反系列化得到的Save对象中存储的信息,激活指定的怪物
for (int i = 0; i < save.livingTargetPosition.Count; i++)
{
int position = save.livingTargetPosition[i];
int type = save.livingMonsterTypes[i];
targetGOs[position].GetComponent<TargetManager>().ActivateMonsterByType(type);
}
//更新UI提示
UIManager._instance.shootNum = save.shootNum;
UIManager._instance.scoreNum = save.score;
//调整为未暂停状态
UnPause();
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)