实现游戏的存档以及读档
实现游戏的存读档有三个方式
- 二进制方法
- 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;}
实现游戏的存档以及读档相关推荐
- Unity游戏存档与读档
目前unity常见存档和读档有几种方式,也就是常见的存储数据的方式(注意存档和读档都是针对单机游戏而言的,角色信息,道具信息,关卡情况等) Unity存档的方式大概分为这两大类 图片来源自siki学院 ...
- Unity中采用JSON进行存档和读档
在利用JSON做存档和读档之前,首先要在Assets导入一个脚本!这个脚本就是LitJson.dll 然后在Unity中首先创建一个Save脚本,用于保存游戏中相关的信息,在这里我存储的是游戏中怪物的 ...
- C++ 关于存档与读档
c++可以用来制作游戏.可是,如果制作的游戏不能存档,那就特别让人心疼了.这种的游戏通常都是辛辛苦苦玩了半天,好不容易打出的记录,程序重启后,一夜回到解放前. 看着宝贵的血汗数据就这样变为0,小凤我决 ...
- Unity_二进制,Jason,XML存档读档
创建一个类Save 用来保存游戏的信息,以便于存档 Save.cs的代码 using System.Collections; using System.Collections.Generic; usi ...
- SaveLoad--Unity存档读档的学习总结
存档与读档功能 举例: 传统RPG游戏(仙剑.空之轨迹): 1.角色信息(生命值,等级) 2.道具信息(装备,药品) 3.场景信息(场景名称.角色坐标) 4.事件信息(任务相关) 关卡类游戏:关卡的通 ...
- [虚幻引擎][UE][UE5]简单的游戏读档存档
[虚幻引擎][UE][UE5]简单的游戏读档存档
- 游戏服务器之存档读档
设计上: (1)存档方式 定时器在一定范围的分钟内随机存档一次,为了避免集中式存档 第一次需要全部存档一次,因为需要存档版本字段 分标签实时存档设置了标签的数据,减少每次存档数据 (2)压缩处理 档案 ...
- 正版七日杀服务器存档,七日杀网吧怎么存档 七日杀网吧存档读档方法介绍-游侠网...
七日杀的电脑要求配置虽然不是特别高,但是相对于很多玩家的电脑来说还是一个不小的负担的,所以很多玩家会选择去网吧游玩,但是很多玩家发现网吧非主机玩家的人物数据重进总是清零.所以今天小编就为大家带来了便是 ...
- c++游戏小技巧2:存读档
<好久没更了>,今天难得有时间,更篇小技巧. 粥锁粥之,<一些游戏没有存档,当你玩到满级时,可能会很尴尬> 为了避免尴尬 流这种东西脱颖而出 ---------------- ...
- Python 名片管理系统(文件版,可存档读档)
Python 名片管理系统(文件版,可存档读档) 相比于函数版的程序,文件版增加了存档读档操作 函数版的可以参考Python名片管理系统(列表.字典和函数的综合应用) 以下是新增部分的代码(不包括调用 ...
最新文章
- 《SAP FIORI 开发入门》课程答疑 第二期
- C语言利用Cairo图形库绘制太极图
- 【Matlab】绘制3D 3维图
- 灰色系统与灰色预测模型
- 计算属性computed的使用
- Android中如何查看在res中存放的drawable文件对应的JAVA类型是什么呢
- Python 可变数据类型和不可变数据类型 - Python零基础入门教程
- c语言代码测试电脑性能,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
- 利用os模块生成 文件夹和文件
- python中import问题
- 线程开启方法之一——异步委托
- Node:项目文件使用async报错var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _calle
- C语言文件读写操作中缓冲区问题和setbuf函数详解
- PAT(甲级)2019年冬季考试 7-1 Good in C (20分)
- JAVA管理信息系统答辩ppt,个人信息管理系统答辩ppt
- 基于pytorch的GAN网络搭建
- 四年的自学,通过这些学习工具拿到了大厂offer,分享给大家
- 为UBUNTU安装一个像千千静听一样的MP3播放器
- 向量叉乘计算多边形面积
- 三防产品外观设计要点