Unity和数据存储

Tulenber 28 February, 2020 ⸱ Beginner ⸱ 4 min ⸱

- 您有SQL专业知识吗?
- 没有
- …

对于任何自重的博客作者,创建一个有关在Unity中设置SQLite的帖子都是一个值得的目标。尽管如此,由于某种原因,本文介绍了社区中流行的第三方产品提供的数据存储方法,并假定技术说明使您考虑了项目的体系结构。同样,在互联网上可以很容易地找到关于设置任何所述电路的说明。

为什么?

显然为什么游戏会保存数据,所以让我们快速对其进行描述。

公理

游戏是出于某种目的更改源数据的动作。

源数据

社区通常认为-在Unity中创建源数据的方法是准备Prefabs,ScriptableObjects和Scenes的集合以及用于在编辑器中进行管理的工具。 不需要其他配置类型。

要存储的数据

Prefabs,ScriptedObjects和Scenes的更改无法保存,因此,重新加载场景后,所有内容将分别返回其原始状态,任何需要保存的状态都需要一些数据存储。示例:如果可以将表中的搅拌器放入库存,则必须保存有关它的信息。

现有解决方案

在Unity中存储数据的唯一现成方法是PlayerPrefs。 这是社区有关存储内容的答案中的一种普遍解决方案。

优点:

  • 非常容易实现

弊:

  • 以开放格式存储
  • 没那么快
  • 它们存放在陌生的地方。 例如,在Windows上,它们存储在注册表中,每条记录限制为1 MB。 此外,它在不同平台上有不同的限制。

结果,这个名字不言而喻。 它是用于存储设置和其他不是很大且不重要的信息的工具。

序列化

所有其他方法都需要序列化,让我们概述其中最受欢迎的方法:

  • Binary - 难以编辑和共享,但总体来说还不错。
  • CVS - 由于某种原因,这是有关Internet中Unity数据库的第一个答案。 你是认真的吗?
  • XML/JSON - 好的旧格式,只有符号数不同。
  • ProtoBuf like - 例如MessagePackFlatBuffers。您可以在FlatBuffers页面上找到其用法以及Json为何不那么出色。

档案

显而易见的方法很容易实现,问题始于大量文件,可管理性和性能都在下降。

SQL

唯一的候选人将是:

  • SQLite-快速,简单,经过时间考验的通用标准。

资产存储中还有其他选项,包括名称中的首字母缩写SQL,但它们看起来非常像同一SQLite上的包装器。有一些ORM解决方案可简化生活,例如sqlite-net。因此,如果需要关系数据库,那么寻找其他东西就没有意义。

NoSQL

过去十年中的热门话题,因此有多种选择:

  • SQLite-谁能阻止我们将其用作kv存储?
  • iBoxDb-它已经存在了很长时间,声称对Unity具有开箱即用的支持,并且有人说使用它
  • LiteDb-与以前的候选软件不同,有更多关于使用它的文章,甚至带有文件和SQLite的性能比较表看起来也很棒。

当前,选择NoSql解决方案已成为标准,几乎没有人提供不使用它们的借口。显然,SQLite似乎是这里最受欢迎的解决方案,而其余解决方案的渗透率不到1%。

High scalability, high availability enterprise production platform

最近,有很多关于Realm.io和类似解决方案的提及,这些解决方案使您可以配置本地和外部数据库的同步,从而省去了开发人员的大部分工作。不幸的是,尽管Realm.io声称支持.Net Standard 2.0,但它不想在最新版本的Unity下启动,因此仍可以期望其新所有者MongoDb将注意力转向游戏行业。

另类:

  • Firebase-宣布支持Unity。最近添加了离线模式。
  • CouchBase-在移动版本中声明对Unity的支持。

当然,这些是用于企业级任务以及下一个Hearthstone并理解为什么需要它的人的解决方案。

结论

一方面,本文不应该给出杀死所有项目的灵丹妙药。另一方面,社区提供的选项的选择不是那么广泛,并且一切都通过binary/json+file/sqlite解决方案以旧方式解决。 由于其他性能问题,社区似乎在这个主题上是如此容易。 但是,如果您想冒险,可以使用LiteDb和FlatBuffers。 我一定会尝试,但这将是一个完全不同的职位。下次见!^_^


如果您喜欢这篇文章,可以为它提供支持



Privacy policyCookie policyTerms of service
Tulenber 2020