创建一个类Save 用来保存游戏的信息,以便于存档

Save.cs的代码

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;[System.Serializable]
public class Save{//怪物的位置和类型public List<int> livingTargetPositions = new List<int>();public List<int> livingMonsterTypes = new List<int>();//设计次数和射击分数public int shootNum = 0;public int score = 0;
}

把信息保存到Save类中

    //创建Save对象并存储当前游戏状态信息private Save CreateSaveGO(){//新建Save对象Save save = new Save();//遍历所有的target//如果其中有处于激活状态的怪物,就把该target的位置信息和激活状态的怪物的类型添加到List中foreach (GameObject targetGO in targetGOs){TargetManager targetManager = targetGO.GetComponent<TargetManager>();if (targetManager.activeMonster != null){save.livingTargetPositions.Add(targetManager.targetPosition);int type = targetManager.activeMonster.GetComponent<MonsterManager>().monsterType;save.livingMonsterTypes.Add(type);}}//把shootNum和score保存在Save对象中save.shootNum = UIManager._instance.shootNum;save.score = UIManager._instance.score;//返回该Save对象return save;}

调用存档方法 保存游戏

二进制进行存档:

//二进制方法:存档private void SaveByBin(){//序列化过程(将Save对象转换为字节流)//创建Save对象并保存当前游戏状态Save save = CreateSaveGO();//创建一个二进制格式化程序BinaryFormatter bf = new BinaryFormatter();//创建一个文件流FileStream fileStream = File.Create(Application.dataPath + "/StreamingFile" + "/byBin.txt");//用二进制格式化程序的序列化方法来序列化Save对象,参数:创建的文件流和需要序列化的对象bf.Serialize(fileStream, save);//关闭流fileStream.Close();//如果文件存在,则显示保存成功if (File.Exists(Application.dataPath + "/StreamingFile" + "/byBin.txt")){UIManager._instance.ShowMessage("保存成功");}}

二进制读档 加载游戏 SetGame(这个方法 提取出来,二进制,Xml,Json存档读档方式都用到)

    //通过读档信息重置我们的游戏状态(分数、激活状态的怪物)private void SetGame(Save save){//先将所有的targrt里面的怪物清空,并重置所有的计时foreach(GameObject targetGO in targetGOs){targetGO.GetComponent<TargetManager>().UpdateMonsters();}//通过反序列化得到的Save对象中存储的信息,激活指定的怪物for(int i = 0; i < save.livingTargetPositions.Count; i++){int position = save.livingTargetPositions[i];int type = save.livingMonsterTypes[i];targetGOs[position].GetComponent<TargetManager>().ActivateMonsterByType(type);}//更新UI显示UIManager._instance.shootNum = save.shootNum;UIManager._instance.score = save.score;//调整为未暂停状态UnPause();}
//二进制方法:读档private void LoadByBin(){if(File.Exists(Application.dataPath + "/StreamingFile" + "/byBin.txt")){//反序列化过程//创建一个二进制格式化程序BinaryFormatter bf = new BinaryFormatter();//打开一个文件流FileStream fileStream = File.Open(Application.dataPath + "/StreamingFile" + "/byBin.txt", FileMode.Open);//调用格式化程序的反序列化方法,将文件流转换为一个Save对象Save save = (Save)bf.Deserialize(fileStream);//关闭文件流fileStream.Close();SetGame(save);UIManager._instance.ShowMessage("");}else{UIManager._instance.ShowMessage("存档文件不存在");}

调用读档方法 加载游戏

Json

同样和上面一样Json方法加载游戏的方法:

json 方法 存档读档

 //JSON:存档和读档private void SaveByJson(){Save save = CreateSaveGO();string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";//利用JsonMapper将save对象转换为Json格式的字符串string saveJsonStr = JsonMapper.ToJson(save);//将这个字符串写入到文件中//创建一个StreamWriter,并将字符串写入文件中StreamWriter sw = new StreamWriter(filePath);sw.Write(saveJsonStr);//关闭StreamWritersw.Close();UIManager._instance.ShowMessage("保存成功");}private void LoadByJson(){ string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";if(File.Exists(filePath)){//创建一个StreamReader,用来读取流StreamReader sr = new StreamReader(filePath);//将读取到的流赋值给jsonStrstring jsonStr = sr.ReadToEnd();//关闭sr.Close();//将字符串jsonStr转换为Save对象Save save = JsonMapper.ToObject<Save>(jsonStr);SetGame(save);UIManager._instance.ShowMessage("");}else{UIManager._instance.ShowMessage("存档文件不存在");}}

Xml

xml方式存档读档

代码如下

//XML:存档和读档private void SaveByXml(){Save save = CreateSaveGO();//创建XML文件的存储路径string filePath = Application.dataPath + "/StreamingFile" + "/byXML.txt";//创建XML文档XmlDocument xmlDoc = new XmlDocument();//创建根节点,即最上层节点XmlElement root = xmlDoc.CreateElement("save");//设置根节点中的值root.SetAttribute("name", "saveFile1");//创建XmlElementXmlElement target;XmlElement targetPosition;XmlElement monsterType;//遍历save中存储的数据,将数据转换成XML格式for(int i = 0; i < save.livingTargetPositions.Count; i++){target = xmlDoc.CreateElement("target");targetPosition = xmlDoc.CreateElement("targetPosition");//设置InnerText值targetPosition.InnerText = save.livingTargetPositions[i].ToString();monsterType = xmlDoc.CreateElement("monsterType");monsterType.InnerText = save.livingMonsterTypes[i].ToString();//设置节点间的层级关系 root -- target -- (targetPosition, monsterType)target.AppendChild(targetPosition);target.AppendChild(monsterType);root.AppendChild(target);}//设置射击数和分数节点并设置层级关系  xmlDoc -- root --(target-- (targetPosition, monsterType), shootNum, score)XmlElement shootNum = xmlDoc.CreateElement("shootNum");shootNum.InnerText = save.shootNum.ToString();root.AppendChild(shootNum);XmlElement score = xmlDoc.CreateElement("score");score.InnerText = save.score.ToString();root.AppendChild(score);xmlDoc.AppendChild(root);xmlDoc.Save(filePath);if(File.Exists(Application.dataPath + "/StreamingFile" + "/byXML.txt")){UIManager._instance.ShowMessage("保存成功");}}private void LoadByXml(){string filePath = Application.dataPath + "/StreamingFile" + "/byXML.txt";if(File.Exists(filePath)){Save save = new Save();//加载XML文档XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(filePath);//通过节点名称来获取元素,结果为XmlNodeList类型XmlNodeList targets = xmlDoc.GetElementsByTagName("target");//遍历所有的target节点,并获得子节点和子节点的InnerTextif(targets.Count != 0){foreach(XmlNode target in targets){XmlNode targetPosition = target.ChildNodes[0];int targetPositionIndex = int.Parse(targetPosition.InnerText);//把得到的值存储到save中save.livingTargetPositions.Add(targetPositionIndex);XmlNode monsterType = target.ChildNodes[1];int monsterTypeIndex = int.Parse(monsterType.InnerText);save.livingMonsterTypes.Add(monsterTypeIndex);}}//得到存储的射击数和分数XmlNodeList shootNum = xmlDoc.GetElementsByTagName("shootNum");int shootNumCount = int.Parse(shootNum[0].InnerText);save.shootNum = shootNumCount;XmlNodeList score = xmlDoc.GetElementsByTagName("score");int scoreCount = int.Parse(score[0].InnerText);save.score = scoreCount;SetGame(save);UIManager._instance.ShowMessage("");}else{UIManager._instance.ShowMessage("存档文件不存在");}}

Unity_二进制,Jason,XML存档读档相关推荐

  1. 正版七日杀服务器存档,七日杀网吧怎么存档 七日杀网吧存档读档方法介绍-游侠网...

    七日杀的电脑要求配置虽然不是特别高,但是相对于很多玩家的电脑来说还是一个不小的负担的,所以很多玩家会选择去网吧游玩,但是很多玩家发现网吧非主机玩家的人物数据重进总是清零.所以今天小编就为大家带来了便是 ...

  2. Python 名片管理系统(文件版,可存档读档)

    Python 名片管理系统(文件版,可存档读档) 相比于函数版的程序,文件版增加了存档读档操作 函数版的可以参考Python名片管理系统(列表.字典和函数的综合应用) 以下是新增部分的代码(不包括调用 ...

  3. SaveLoad--Unity存档读档的学习总结

    存档与读档功能 举例: 传统RPG游戏(仙剑.空之轨迹): 1.角色信息(生命值,等级) 2.道具信息(装备,药品) 3.场景信息(场景名称.角色坐标) 4.事件信息(任务相关) 关卡类游戏:关卡的通 ...

  4. 游戏服务器之存档读档

    设计上: (1)存档方式 定时器在一定范围的分钟内随机存档一次,为了避免集中式存档 第一次需要全部存档一次,因为需要存档版本字段 分标签实时存档设置了标签的数据,减少每次存档数据 (2)压缩处理 档案 ...

  5. c++游戏小技巧2:存读档

    <好久没更了>,今天难得有时间,更篇小技巧. 粥锁粥之,<一些游戏没有存档,当你玩到满级时,可能会很尴尬> 为了避免尴尬 流这种东西脱颖而出 ----------------  ...

  6. Unity游戏存档与读档

    目前unity常见存档和读档有几种方式,也就是常见的存储数据的方式(注意存档和读档都是针对单机游戏而言的,角色信息,道具信息,关卡情况等) Unity存档的方式大概分为这两大类 图片来源自siki学院 ...

  7. C++ 关于存档与读档

    c++可以用来制作游戏.可是,如果制作的游戏不能存档,那就特别让人心疼了.这种的游戏通常都是辛辛苦苦玩了半天,好不容易打出的记录,程序重启后,一夜回到解放前. 看着宝贵的血汗数据就这样变为0,小凤我决 ...

  8. [虚幻引擎][UE][UE5]简单的游戏读档存档

    [虚幻引擎][UE][UE5]简单的游戏读档存档

  9. Unity中采用JSON进行存档和读档

    在利用JSON做存档和读档之前,首先要在Assets导入一个脚本!这个脚本就是LitJson.dll 然后在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的 ...

最新文章

  1. chrome浏览器调试手机端h5页面
  2. Ajax异步加载的知识点
  3. hdu 3047 Zjnu Stadium(并查集)
  4. 201103阶段二linux gdb调试与ftp配置
  5. 关于MySql插入数据的乱码问题
  6. L1-005 考试座位号 (15分) C语言实现(18行代码AC!)
  7. excel实战应用案例100讲(十五)-在Excel中对Python进行操作完美工具PyXLL-Jupyter
  8. java模块间调用信息_java与c++模块之间的交互方法?
  9. MapReduce任务学习系列
  10. PowerDesigner物理模型生成Excel文件
  11. XMLHttpRequest对象AJAX技术的基本使用
  12. 变压器绕组降低邻近效应_高功率UPS性能提升,规格/重量显著降低
  13. 【UWB 定位】室内定位 三边定位算法
  14. printf 输出格式、域宽
  15. D. Drunk Passenger(数学概率)
  16. 台式机切换有线/无线网脚本
  17. 腾讯技术开放日 | 腾讯会议如何进行视频质量评估与优化?
  18. Linux内核IP Queue机制的分析(一)
  19. MySQL备份恢复方案
  20. 解决Win10任务栏图标消失

热门文章

  1. 虹科分享 | 在ntopng中使用黑名单捕获恶意软件通信
  2. Javascript 获得当前文件的url 目录,不含文件名
  3. m3u8文件里只有js链接,没有ts链接,和key文件的一点记录
  4. 国产男装「升级潮」下,九牧王、劲霸、海澜之家们顺利「上分」了吗?
  5. 爬虫,第十次实战之线程池(梨视频下载)
  6. 在WinServer上安装小红伞杀毒软件的经验总结
  7. linux服务器创建用户
  8. 安装配置Tomcat6教程
  9. python受益股_Python 金融: 看看 A股区块链板块
  10. TCP/IP协议分层