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