Unity_二进制,Jason,XML存档读档
创建一个类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存档读档相关推荐
- 正版七日杀服务器存档,七日杀网吧怎么存档 七日杀网吧存档读档方法介绍-游侠网...
七日杀的电脑要求配置虽然不是特别高,但是相对于很多玩家的电脑来说还是一个不小的负担的,所以很多玩家会选择去网吧游玩,但是很多玩家发现网吧非主机玩家的人物数据重进总是清零.所以今天小编就为大家带来了便是 ...
- Python 名片管理系统(文件版,可存档读档)
Python 名片管理系统(文件版,可存档读档) 相比于函数版的程序,文件版增加了存档读档操作 函数版的可以参考Python名片管理系统(列表.字典和函数的综合应用) 以下是新增部分的代码(不包括调用 ...
- SaveLoad--Unity存档读档的学习总结
存档与读档功能 举例: 传统RPG游戏(仙剑.空之轨迹): 1.角色信息(生命值,等级) 2.道具信息(装备,药品) 3.场景信息(场景名称.角色坐标) 4.事件信息(任务相关) 关卡类游戏:关卡的通 ...
- 游戏服务器之存档读档
设计上: (1)存档方式 定时器在一定范围的分钟内随机存档一次,为了避免集中式存档 第一次需要全部存档一次,因为需要存档版本字段 分标签实时存档设置了标签的数据,减少每次存档数据 (2)压缩处理 档案 ...
- c++游戏小技巧2:存读档
<好久没更了>,今天难得有时间,更篇小技巧. 粥锁粥之,<一些游戏没有存档,当你玩到满级时,可能会很尴尬> 为了避免尴尬 流这种东西脱颖而出 ---------------- ...
- Unity游戏存档与读档
目前unity常见存档和读档有几种方式,也就是常见的存储数据的方式(注意存档和读档都是针对单机游戏而言的,角色信息,道具信息,关卡情况等) Unity存档的方式大概分为这两大类 图片来源自siki学院 ...
- C++ 关于存档与读档
c++可以用来制作游戏.可是,如果制作的游戏不能存档,那就特别让人心疼了.这种的游戏通常都是辛辛苦苦玩了半天,好不容易打出的记录,程序重启后,一夜回到解放前. 看着宝贵的血汗数据就这样变为0,小凤我决 ...
- [虚幻引擎][UE][UE5]简单的游戏读档存档
[虚幻引擎][UE][UE5]简单的游戏读档存档
- Unity中采用JSON进行存档和读档
在利用JSON做存档和读档之前,首先要在Assets导入一个脚本!这个脚本就是LitJson.dll 然后在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的 ...
最新文章
- chrome浏览器调试手机端h5页面
- Ajax异步加载的知识点
- hdu 3047 Zjnu Stadium(并查集)
- 201103阶段二linux gdb调试与ftp配置
- 关于MySql插入数据的乱码问题
- L1-005 考试座位号 (15分) C语言实现(18行代码AC!)
- excel实战应用案例100讲(十五)-在Excel中对Python进行操作完美工具PyXLL-Jupyter
- java模块间调用信息_java与c++模块之间的交互方法?
- MapReduce任务学习系列
- PowerDesigner物理模型生成Excel文件
- XMLHttpRequest对象AJAX技术的基本使用
- 变压器绕组降低邻近效应_高功率UPS性能提升,规格/重量显著降低
- 【UWB 定位】室内定位 三边定位算法
- printf 输出格式、域宽
- D. Drunk Passenger(数学概率)
- 台式机切换有线/无线网脚本
- 腾讯技术开放日 | 腾讯会议如何进行视频质量评估与优化?
- Linux内核IP Queue机制的分析(一)
- MySQL备份恢复方案
- 解决Win10任务栏图标消失