目前,我正在将游戏进度保存在JSON格式的文件中。每次玩家完成关卡,一个新的条目将被添加到JSON文件中作为跟随"level_N":{"score":234,"points":22},,这个文件将被保存在关卡完成的末尾。考虑播放器达到级别2345左右的场景,在这种情况下,在某些移动设备中,保存到级别完成的文件需要相当长的时间。如何管理保存如此大量的数据?我必须使用其他格式吗?或者我必须将每个关卡详细信息保存在单独的文件中?
发布于 2018-10-02 01:18:46
PlayerPrefs是保存数据的最简单方法。它旨在处理基本数据类型(int、string、float),其工作方式类似于字典,因此您可以简单地将JSON字符串存储为键-值对。iOS和Android也没有大小限制( webplayer的大小限制为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);发布于 2018-09-25 14:15:47
您可以使用PlayerPrefs类来保存本地数据。
在您的例子中,您可以将json转换为string,然后调用PlayerPrefs.SetString保存/PlayerPrefs.GetString以获取。
发布于 2018-09-25 15:48:12
对于本地数据管理来说,PlayerPrefs总是一个很好的选择,但是如果你计划在你的游戏中添加在线功能,我建议你看看Firebase Realtime Database来同步离线支持的json数据。并让firebase管理移动设备上的性能问题。你可以看到如何轻松地将Firebase数据库集成到Here项目中。
https://stackoverflow.com/questions/52491198
复制相似问题