实现游戏的存读档有三个方式

  • 二进制方法
  • XML
  • JSON

对比

二进制方法:简单,但可读性差。
XML:可读性强,但是文件庞大,冗余信息多。
JSON:数据格式比较简单,易于读写,但是不直观,可读性比XML差。

二进制方法(Binary Formatter)

序列化:新建或打开一个二进制文件,通过二进制格式器将对象写入该二进制文件。
反序列化:打开待反序列化的二进制文件,通过二进制格式器将文件解析成对象。

JSON:

是一种语言无关的发送和接收数据的常用格式。可以使用它来跨平台的传输数据。
JSON序列化:对象 JSON
JSON反序列化:JSON 对象

XML

扩展标记语言,用于标记电子文件使其具有结构性的标记语言。
可以用来标记数据、定义数据类型。
序列化与反序列化的方式与二进制方法十分类似。
http://blog.csdn.net/y1196645376/article/details/52541882

具体实现操作如下

创建save保存类,在unity下创建c#脚本save

public class save
{public List<int> livingtargetposition = new List<int>();//存活敌人位置信息public List<int> livingmonstertype = new List<int>();//存活敌人类型信息public int shootnum = 0;//射击数public int score = 0;//得分数}

还需要添加一句非常重要的代码。在类声明之上,添加:

[System.Serializable]

这是一个属性,它标明了代码的一个元数据。它告诉 Unity 这个类可以被序列化,这意味着你可以将它转换成字节流并保存到磁盘文件中。
在gamemanger中我们
创建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 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;}

以二进制的方法保存游戏

 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();}

读取游戏

 private void LoadByBin(){ //反序列化过程//创建一个二进制格式化程序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);}

//通过读档信息重置我们的游戏状态(分数、激活状态的怪物)

 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;}

实现游戏的存档以及读档相关推荐

  1. Unity游戏存档与读档

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

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

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

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

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

  4. Unity_二进制,Jason,XML存档读档

    创建一个类Save 用来保存游戏的信息,以便于存档 Save.cs的代码 using System.Collections; using System.Collections.Generic; usi ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 《SAP FIORI 开发入门》课程答疑 第二期
  2. C语言利用Cairo图形库绘制太极图
  3. 【Matlab】绘制3D 3维图
  4. 灰色系统与灰色预测模型
  5. 计算属性computed的使用
  6. Android中如何查看在res中存放的drawable文件对应的JAVA类型是什么呢
  7. Python 可变数据类型和不可变数据类型 - Python零基础入门教程
  8. c语言代码测试电脑性能,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  9. 利用os模块生成 文件夹和文件
  10. python中import问题
  11. 线程开启方法之一——异步委托
  12. Node:项目文件使用async报错var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _calle
  13. C语言文件读写操作中缓冲区问题和setbuf函数详解
  14. PAT(甲级)2019年冬季考试 7-1 Good in C (20分)
  15. JAVA管理信息系统答辩ppt,个人信息管理系统答辩ppt
  16. 基于pytorch的GAN网络搭建
  17. 四年的自学,通过这些学习工具拿到了大厂offer,分享给大家
  18. 为UBUNTU安装一个像千千静听一样的MP3播放器
  19. 向量叉乘计算多边形面积
  20. 三防产品外观设计要点

热门文章

  1. 只需5秒,赶走阴冷寒风,迎来温暖热浪,云米对流电暖器体验
  2. 我是个Java开发者,我到底要不要学大数据开发?
  3. 签证管理系统 签证软件
  4. python处理excel表格
  5. ​【汇总】CV 图像分类常见的 36 个模型
  6. Java Web实训-西蒙购物网
  7. 什么是统计学中的 Standard Error ( SE )?
  8. zencart php5.6环境,BlueHost主机一键安装ZenCart图文教程
  9. shimo的学习之MySQL 学习
  10. wyh2000 and pupil