我在用户设备上找到savefiles时遇到了问题。通常它都是这样的:
if (File.Exists(Application.persistentDataPath + fileName)) {
byte[] data = File.ReadAllBytes(Application.persistentDataPath + fileName);
这很好,除了Android玩家将游戏安装在SD卡上并且Google Play商店的更新使应用程序安装在内部存储中。这会导致Application.persistentDataPath成为内部路径,但是savefile仍然在外部路径上,因此无法找到savegame并且玩家有问题他们似乎失去了进度。
除了将保存文件存储到PlayerPrefs中之外,还有更好的方法吗?我真的很想能够向玩家询问他们的存档文件以防万一有问题,所以他们可以把它发给我。
答案 0 :(得分:2)
不是将整个文件存储在PlayerPrefs中,而是存储您保存的路径。像这样:
public static string GetSaveFilePath(string fileName){
// Got a path already?
string path = PlayerPrefs.GetString(fileName+"-location");
if( string.IsNullOrEmpty(path) ){
// Nope - create a path now:
path = Application.persistentDataPath + fileName;
// Save the path:
PlayerPrefs.SetString(fileName+"-location", path);
PlayerPrefs.Save();
}
return path;
}
然后,而不是使用Application.persistentDataPath
,而是使用GetSaveFilePath
:
string path = GetSaveFilePath("save.dat");
if (File.Exists(path)) {
byte[] data = File.ReadAllBytes(path);
...
}
或者,更常见的方法是在您的应用程序中添加一个按钮,以上传您认为对调试有用的任何信息等,然后在PlayerPrefs中存储您需要的任何内容,这样它就可以“正常工作”(即不需要它作为单独的文件)。