在Unity游戏中保存玩家的进度


22

我正在使用Unity游戏引擎制作游戏。我想保存玩家的进度,包括等级,经验值,选择的角色等。目前,我正在使用playerprefs,但我想知道这是否也适用于将在其移动设备(Android / iOS)上运行此游戏的玩家作为台式机(OSX / PC)?如果没有,那么我应该如何保存此信息?我想在清除每个阶段后自动保存玩家进度。

Answers:


30

PlayerPrefs可以跨平台运行,但是建议将其用于游戏进度保存文件,因为它不安全。作为纯文本文件,玩家可以轻松地打开它并更改内容以作弊,或者使您的游戏行为异常。也不能保证一直在附近。

PlayerPrefs用于非必需的首选项信息,例如控件映射或音乐/ sfx设置-播放器可以自由更改的内容,并且如果他们打算(例如在Windows上)使用系统还原点并且不会丢失,也不会错过他们的一些注册表信息。如果这失去了他们的高分或竞选进度,玩家将很不高兴!

相反,建议将游戏进度保存在您自己的文件中(通常是二进制文件,如果您想使其更难修改的话,可以加密或签名,但请参见下面的Philipp评论)。

您可以使用Application.persistentDataPath来获取每个平台上的可靠保存位置。这通常位于用户数据文件夹中,在上面的示例中这种情况不会消失。

一旦有了保存的路径,就可以使用常规的C#IO方法创建,写入和读取文件。详细信息将根据保存文件的格式和结构而有很大不同,因此,如果遇到麻烦,最好提出一个新问题,详细说明您要做什么以及卡在哪里。


30
在我看来,加密和签名您的savegame文件仅仅是蛇油。这是不安全的,因为您必须将密钥和算法存储在游戏可执行文件中,熟练的黑客才能访问它们。这也没有意义。如果是单人游戏:为什么要打扰?让玩家以自己想要的方式享受游戏。如果是多人游戏,则应将所有内容保存在服务器上,以防被操纵。
菲利普

5
@SamedTarıkÇETİN 数据路径(安装游戏的位置)与持久数据路径(保存新数据的可靠位置)之间存在重要区别。在某些平台上,内置游戏无法写入已安装的数据路径,因此建议将保存在持久数据路径位置作为一般规则。
DMGregory

2
尽管我同意@Philipp所说的那样,客户端存储从来都不是真正安全的,而且在很多情况下,我们不需要为保护单人游戏而费力,但最终要选择的安全性或混淆性是每个创作者都必须自己做。有了这个答案,我只想向询问者提供信息,以便就适合自己的游戏的情况做出明智的选择。
DMGregory

1
一方面,我同意@Philipp,但我也看到/使用了一个序列化的保存文件,该文件在文本编辑器中无法使用。是的,我可能已经想出了如何进行一些更改或其他更改,但是由于该文件看起来像2兆原始十六进制数,因此非常麻烦。在这种情况下,只有最顽固的家伙会尝试将其拆解,并且结果将特定于游戏中的那个点(向保存中添加一个单位,将所有后续数据推向下游)。话又说回来,它没有打算是安全的。
Draco18s 2015年

2
@ShantanuSingh,不将它们存储在PlayerPrefs中。这类信息应存储在远程数据库中,并在应用启动时请求。为了在不可用Internet连接时保持兼容性,请回退到本地安全保存的文件(即:加密)。数据库值(如果可用)应覆盖本地值。应用内购买插件也可能以其他方式处理事情,但它可能是“需要互联网”,容易被黑客入侵(即使加密文件也不是100%安全的)或此评论详细说明。
Draco18s 2015年


-1

PlayerPrefs是一个K / V商店,旨在为您构建的任何平台“正常工作”。我说只是继续使用它,除非您有令人信服的理由不这样做。


我认为,如果有令人信服的理由不使用PlayerPrefs ,问题就很多了(是的,有)。因此,我否决了这个答案,因为它没有回答问题。
彼得-Unban罗伯特·哈维

-1

那么最好的方法就是节省服务器端?将所有保存的所需信息转换为json字符串,并将其作为字符串数据存储到自己的mysql服务器中,何时需要加载,连接到服务器并还原它?


4
这不是问题的答案。如果您有问题,请提出一个新问题
Sourav Paul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.