##游戏存档
####在Unity中游戏存档有如下四种方式:

  • PlayerPrefs
  • c#序列化
  • XML序列化
  • Json

**原文链接:**http://blog.csdn.net/a237653639/article/details/50076755

游戏存档是老大之前吩咐要做的,一开始我问可以用PlayerPrefs不呢,锐哥老大回答说不可以,用Unity自带的会有很多的限制。那好吧,为了自由故,我就只好研究另外的三种了。于是就上网去查别人是怎么做存档的(我有个习惯,如果自己是第一次做,我就会先去看别人是怎样做的),很容易就找到了一位大大的博客,一试之下,果然是棒棒的。于是第二天我就喜滋滋地去交差了。在锐哥的一番审视下,对我写的存档提出了几点意见和要求:

1.游戏版本的升级

2.玩家有多个存档

3.玩家破坏存档的情况

4.注释太多和把玩家类再包一层等编码的细节的建议

既然有新需求了,那咱就再加把劲继续干活完成任务吧!于是经过一天和晚上到凌晨的折腾,终于把需求2实现了,需求3也容易,用try catch,只要解析不正确则认为存档被破坏。第四个也改了。而需求1的好像用这个代码什么也不做也实现了。非常完美!内心激动的跟主城说这些功能都实现啦!(如果事情就到这里,也就没有下文了。)而后锐哥说你用的是XML么。我说是的。这时一旁的皮皮说,你咋不用Json呢,好用又轻量。既然代码还可以更好,那好吧,我就再研究研究~~毕竟程序员对于优化都是有情结的=。=而后我采用改了c#序列化方式,既不用XML,也不用Json,而且一序列化相当于也加密了,这么多的优点!过了一个月后,直到今天,我才发现用C#序列化的缺点,然后果断放弃了,最后用的是Json。


####下面说一说每个的优点与缺点:

  • PlayerPrefs

**优点:**上手简单,存储方便,不用考虑内部实现,适合做小游戏的数据存档(网上一搜,发现很多网友都是用的这种方式。

**缺点:**只支持基本数据类型,无法存储一个类,数组,集合,字典等。不过肯定是可以用一个框架来实现自动赋值的,只是感觉更麻烦一点。


  • c#序列化

**优点:**除了静态类型和抽象类型以及类必须标记为[Serializable]的(其实这个不是什么问题了),其他的都可以被序列化:类,数组,集合,字典,类及其子类等。而且序列化之后你也看不懂是什么鬼(哈哈)~~。

缺点:
1.不会调用要序列化类的构造函数(当然可以通过实现ISerializable和IDeserializationCallback接口来实现在序列化和反序列化之前对数据的处理,所以这个不是我放弃它的重点)。
2.在升级版本后,新增一个字段也只是采用系统默认值,而不是我在类中直接赋的值,这导致我需要自己去比较当前版本和之前的每一个版本的版本号,然后再挨个处理每个以前版本的升级,就意味着当前是第N次更新,我要做N-1次if判断并手动赋值(这段话是结合自己的项目记录的,当然也就我看得懂了^^)。
3.而让我放弃它的最终原因是,在升级版本后,如果删除了之前的一个字段,则无法正确解析(反序列化),这种情况就最不能容忍了。我不敢冒这样的风险,保证以后的版本不会删除其中一个字段。或许你会想到“你可以保留啊,然后不管它就是了”,不过鉴于我有个超追求完美的boss,只好放弃。毕竟这还不如XML。


  • XML序列化

优点: 1.序列化出来的数据直观,可以序列化类和类中的对象。 2.升级版本后,如果新增了字段,则自动采用你在类中赋给该变量的值。 3.升级版本后,如果删除了之前的字段,则自动忽略之前的字段,而不会像c#序列化一样报错,

缺点: 1.不能序列化字典,二维数组以上的数据 2.比Json更占空间,且引入的dll也更大


  • Json(LitJson)

优点: 1.简单轻量 2.可以满足你要序列化的几乎任何类型数据(除了float必须用double来存) 3.如果要升级版本,可以任意删除之前的字段而不会出现不能解析的情况;可以新增字段且采用你在类中直接赋的值(不用像c#序列化那样手动赋值了)。

**缺点:**1.相对PlayerPrefs来说,引入了一个50kb左右的dll。 2.不能序列化float类型。3.不支持更改字段名。如果更改了,就相当于是两个操作,即删除之前的并新增加一个(这一点很重要)。


以上是我今天辛勤耕耘的成果,白天耕种,夜晚收割。如果不写下来,今天我肯定就白搞了。

Unity中游戏存档方式相关推荐

  1. Unity游戏开发之游戏存档方式

    目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...

  2. unityplayerpre存档_c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来...

    在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...

  3. unity中游戏对象的运动控制方法总结

    1.使用unity中的Standard Assets包中的控制器 这个资源在资源商店中搜Standard Assets就可以下载并导入,在其Characters文件夹中有第一人称和第三人称的控制器,在 ...

  4. c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来

    在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...

  5. Unity中游戏多种武器旋转方式

    -- 本人学习多种单机游戏的总结笔记 2D中武器跟随鼠标位置旋转 这个一些2D屏幕游戏或者像捕鱼达人也会有这类实现. 第一种代码实现(略微简单,如果能没出错,建议使用这个,如果转化出错可以参考第二种的 ...

  6. Unity中关于作用力方式ForceMode的功能注解

    牛顿运动定律包含以下三个定律: 牛顿第一运动定律: 孤立质点保持静止或做匀速直线运动: 用公式表达为:   ,式中   为合力,   为速度,   为时间. 牛顿第二运动定律: 动量为   的质点,在 ...

  7. Unity中游戏卡牌滚动效果,EnhanceScrollview(适用于NGUI,UGUI)

    最近项目中的活动面板要做来回滚动卡牌预览效果,感觉自己来写的话,也能写,但是可能会比较耗时,看到Github上有开源的项目,于是就借用了,Github的资源地址是:https://github.com ...

  8. Unity中游戏重新加载玩家位置不变的方法

    在玩游戏时,有时候会遇见需要保存玩家位置,这种游戏在做游戏和玩游戏时还是很常见的,那么我们是如何来保存玩家的位置,以做到让玩家下次加载时不会受到位置的丢失.下面是我在游戏中的解决方法. 1.先看下我做 ...

  9. Unity中游戏的声音管理

    从来没写过博客,作为一名菜鸟也不知道写些什么.特地偷同事点料/ 源地址:http://www.cnblogs.com/jenke/p/4608422.html using UnityEngine; u ...

最新文章

  1. Javascript之旅——第一站:从变量说起
  2. 如何在Linux系统上部署接口测试环境
  3. alsa 测试 linux_python语音智能对话聊天机器人--linuxamp;amp;树莓派双平台兼容
  4. Playmaker Input篇教程之Playmaker购买下载和导入
  5. Apache Traffic Server处理请求的过程
  6. 大数据到底是不是“算命”?技术大牛们这样说
  7. 《大学数学遐想》系列之后记
  8. 算法竞赛入门经典(第二版) | 程序3-10 生成元 (UVa1584,Circular Sequence)
  9. 云图说|DRS数据对比——带您随时观测数据一致性
  10. 一些值得好好学习的博客或者网站
  11. Sixpack —— 支持多语言的 A/B 测试框架
  12. 【比赛】CCF BDCI新闻情感分类初赛A榜4/2735,复赛1%题解报告
  13. 三、亚马逊产品定价其实就这么简单,一个公式解决
  14. 免费下载知网论文的重要链接
  15. 科学家发现程序员秃头新原因,毛囊干细胞竟会悄悄逃走
  16. 论文学习笔记-M2Det
  17. Kubernetes 健康状态检查liveness和readiness
  18. 白盒测试--数据流测试
  19. 一级计算机浏览器题加收藏夹,2016年计算机一级考试上机操作重难点突破
  20. React-native实现联系人列表分组组件

热门文章

  1. 百度AIstudio绘制饼图,雷达图以及使用中文字体
  2. matlab怀特检验,Eviews8.0多元回归后怀特检验有异方差,如何修正?
  3. CentOS 7 wget 正在连接 127.0.0.1:8118... 失败:拒绝连接。
  4. 一个问题,两人讨论,几行代码,一些启发
  5. 高端生活变革之路:“速食文化”到“独享宴会”
  6. 国际知名服装品牌网站集合
  7. java obervable_了解Java的Observable和JavaFX的Observable
  8. 华为接入交换机基于MAC地址做端口绑定
  9. Thiol-PEG-SH,巯基聚乙二醇巯基,Thiol-PEG-Thiol
  10. MySQL学习的第一天 查询