如何在移动设备(Unity)中保存/管理游戏进度?

时间:2018-09-25 05:33:52

标签: unity3d

当前,我将游戏进度保存为JSON格式的文件。玩家每次完成关卡时,都会按照 "level_N":{"score":234,"points":22}, 的顺序将新条目添加到JSON文件中 该文件将在级别完成时保存。考虑播放器达到2345级左右的情况,在这种情况下,在某些移动设备中将其保存到完整级别的文件将花费更长的时间。如何管理保存如此大量的数据?我必须使用其他格式吗?还是我必须将每个级别的详细信息保存在单独的文件中?

3 个答案:

答案 0 :(得分:3)

PlayerPrefs是保存数据的最简单方法。它旨在处理基本数据类型(整数,字符串,浮点数),并且像字典一样工作,因此您只需将JSON字符串存储为键值对即可。而且,iOS或Android上没有大小限制(在网络播放器中,大小限制为1MB)。

// read
PlayerPrefs.GetString(string key, string value);

// write
PlayerPrefs.SetString(string key, string value);

// load and update
const saveKey = "level_N";
Private void SaveProgress() 
{
    string saveValue = "your JSON string"; 
    string loadValue = PlayerPrefs.GetString(saveKey); 
    if (!saveValue.Equals(loadValue)) 
    {
        PlayerPrefs.SetString(saveKey, saveValue); 
        PlayerPrefs.Save();
    }
}

用户数据将在OnApplicationQuit()期间自动写入磁盘,但是如果您的游戏崩溃,您可能需要使用PlayerPrefs.Save()

已经说过,在移动设备上将大量数据保存到PlayerPrefs可能很慢。因此,如果您想提高游戏性能或需要更多空间,可以使用Application.persistentDataPath将数据保存到设备上的公共目录中。与PlayerPrefs相似,在更新应用程序时不会清除数据。

FileStream file = File.Open(Application.persistentDataPath + "/gameInfo.dat", FileMode.Open);

答案 1 :(得分:2)

您可以使用PlayerPrefs类进行保存以保存本地数据。
在您的情况下,您可以将json截断为字符串,然后调用PlayerPrefs.SetString进行保存/PlayerPrefs.GetString进行获取。

答案 2 :(得分:0)

PlayerPrefs 始终是本地数据管理的不错选择,但是如果您打算在游戏中添加在线功能,建议您参考Firebase Realtime Database来与json同步数据离线支持。并让Firebase管理移动设备上的性能问题。 Here,您将了解如何轻松地将Firebase数据库集成到您的Unity项目中。