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

  • 二进制方法
  • 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. Linq 异常“此提供程序只支持对返回实体或投影(包含所有标识列)的有序查询使用 Skip()...”...
  2. iOS中POST请求
  3. Asterisk AGI脚本
  4. 程序员分析报告(2018)-总结篇
  5. dbeaver 设置编码_DBeaver 一个神奇的数据库操作软件
  6. Qweb Pdf 中添加 图片
  7. PHP7.1 狐教程
  8. 全国计算机二级C语言过关要求,计算机二级考试c语言过关经验
  9. 农夫山泉下场当“烧水工”,熟水市场是“鸡肋”还是“机遇”?
  10. 达梦DM单机部署以及日常运维管理
  11. mysql MMM方案
  12. 使用OMF(Oracle Managed Files,Oracle管理的文件)的场景示例
  13. 【JY】有限单元分析的常见问题及单元选择
  14. 牛客网错题集系列(三)
  15. SpringMVC框架中@ControllerAdvice和对应Advice切面使用原理
  16. Linux——网络与配置
  17. jquery.form 异步上传文件(写的不是很好,望大家多海涵)
  18. 基于开源WebSocket服务器宝贝鱼(CshBBrain)的应用横空出世
  19. 微信公众号-添加参数获取场景二维码路径
  20. 积分入户深圳申报要具备哪些条件

热门文章

  1. Windows7高级检索功能——搜索筛选器
  2. 180亿美元估值,快手用什么来支撑?
  3. 在Windows 2012 R2上安装Intel I217-V/I218-V网卡驱动
  4. Oliver的救援(广搜练习题)
  5. 疫情之后的2020长什么样
  6. Gini Index vs Information Entropy
  7. 使用python爬取百度今日热点事件排行榜
  8. 【Java从零到架构师第③季】【30】SpringMVC-转发_重定向_路径问题总结
  9. 小米云服务器怎么管理员密码,小米路由器初始密码是什么 小米路由器管理密码是多少-192路由网...
  10. 计算机启动时检测硬盘,电脑总是启动检测硬盘怎么办