Unity保存数据的几种方式 | 序列化方案详解

在游戏开发中,数据的保存与管理是一项至关重要的任务。正确且高效地实现数据保存,能够极大地提升游戏的可玩性和用户体验。目前,游戏开发中有多种灵活的数据保存方式,每种方式都有其独特的适用场景和优缺点。本文将详细介绍Unity中几种常用的数据存储方法,帮助开发者根据实际需求选择最适合的数据存档方案。

1.PlayerPrefs

PlayerPrefs是Unity内置的一种简单的键值存储方案,用于存储少量的游戏数据。它基于本地注册表来存储数据,数据以键值对的形式保存在注册表上。

因此它具有注册表所具的特性,适用于简单数据且单个数据量小的存档,读取速度较快。

因注册表通常用于临时存储数据量小的记录,所以不适用于存储相对复杂的内容。

推荐你可以在PlayerPrefs上做一层cache层,对于频繁读取的数据量小的数据,性能会提高很多。

2.二进制

C#支持将一个对象数据序列化为二进制数据,以二进制形式保存在磁盘中。在读取数据时,再从磁盘中将二进制数据反序列化为内存的对象。

该方式使用起来很方便,且其二进制形式的数据也并不容易被直接修改。但该方式会保存与值无关的所有元信息,无论是在序列化、反序列化还是磁盘的占用上开销都是巨大的。

还有二进制序列化难以跨平台是一个很大的问题。举个简单的例子,若服务端使用C#序列化数据,那么客户端也得采用与服务端相同的语言,相同的版本的类库才能反序列化得到数据。甚至,若是已经上线的项目想要更换语言重构项目,那么线上的二进制数据要想在新的平台上正确反序列化是相当困难的。

不推荐在正式的商业项目中使用这种方式来存档。

3.XML

XML 是一种标记语言。层级结构清晰,易于阅读。格式已经形成标准,是一种常用的跨平台标记语言,一份XML文件可以在不同平台之间共享。

在C#中,可以通过XmlDocument等库来将一组数据以XML形式存储在磁盘中。

适用于要求层次结构清晰、父子关系强关联,且结构复杂的数据。也是因为其层次化结构,解析时需要逐级遍历。

数据结构相对JSON格式不够简洁。

因此XML擅长描述文档,常用于配置文件存储。

4.Json

与XML语言类似,JSON格式也已形成标准,跨平台兼容性好。与 XML 相比,JSON优势就是它语法简洁,使用键值对来表示数据、嵌套关系通过{}来表示,语义清晰、直观。 没有繁琐的标签,数据结构简单,冗余数据少,存档与网络传输更高效,是一种常用的数据存档方式。

在Unity中,可以通过LitJson、JsonUtility、Newtonsoft.Json等库来将一组数据以Json形式存储在磁盘中。

LitJson、JsonUtility、Newtonsoft.Json这些库支持你直接你序列化复杂的数据对象,可以不需要一个节点一个节点的向json文件中添加数据。

5.数据库

数据库是一种常用的数据保存方案,适用于存档量需求较大的项目。其通过索引可以直接定位到值所在的数据快,从而读写一个值只会读写对应数据块,不需要整组全量读写。相对Json、Xml这种以文件为单位进行序列化,数据库读取开销与压缩比在大多情况下都要低。

使用数据库可以方便地存储大量的数据,方便地进行数据的插入、查询、更新和删除等操作。

但不加控制的使用,忽视了合理规划与优化,很容易的产生严重的性能问题,有时其性能甚至不及Json序列化方式。

因此我们需要一套精心设计且高性能的数据管理及存档方案,来帮助我们快速上手,确保系统运行的稳定与高效。

在这方面,Flexi Archive脱颖而出,成为理想的选择。

6.Flexi Archive - 灵活强大高效的存档方案

官方文档:Flexi-Archive官方文档 - 温文

GitHub:https://github.com/wenen-creator/FlexiArchiveSystem

正如 Flexi Archive 名字一样,Flexi Archive 以 Flexible 为设计理念,旨在通过其高度可扩展性、易上手、高性能以及完善的工具等特点,提供一个满足复杂存档需求的灵活而强大的解决方案。

强大的功能:多存档机制、存档克隆、可保存任何复杂的自定义类型、多账号存档共存、多个存档系统、多种序列化方案自选、数据存档监视工具等

极致的灵活性:在 Flexi Archive System 中,你可以用轻松地几行代码 跨平台 保存几乎任何东西,同时 Flexi Archive System 以其高度可扩展的架构设计,允许你根据实际需求轻松的自定义数据类型和存档策略、数据格式。

智能的资源管理:Flexi Archive 智能地管理数据,通过按需加载、缓存机制和分组策略等手段,有效减少性能开销,提高存储效率。

卓越的性能:Flexi Archive System 系统采用了高效的存储机制。默认采用按需载入原则,通过合批、异步IO、缓存机制、分组策略、脏标记等大量优化策略,其性能在大多情况下都比其他序列化方案要高。确保用户在进行大量频繁的数据操作时,也能够快速响应。得以轻松应对游戏中复杂需求。

便捷的数据存档监视工具: Flexi Archive System 提供了与系统层配套的数据查询工具,方便你在运行时实时的监视数据的变化(支持非运行时和运行时使用)。

无缝的集成与扩展:Flexi Archive 提供了丰富的API接口和易于使用的界面,同时,其可扩展的架构设计使得系统能够轻松应对业务增长的需求,确保系统的长期稳定运行。

作者:Miracle
来源:麦瑞克博客
链接:https://www.playcreator.cn/archives/unity/4161/
本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议,转载请注明!
THE END
分享
海报
Unity保存数据的几种方式 | 序列化方案详解
在游戏开发中,数据的保存与管理是一项至关重要的任务。正确且高效地实现数据保存,能够极大地提升游戏的可玩性和用户体验。目前,游戏开发中有多种灵活的数据……
<<上一篇
下一篇>>
文章目录
关闭
目 录