我在查找用户设备上的保存文件时遇到了问题。通常它都是这样工作的:
if (File.Exists(Application.persistentDataPath + fileName)) {
byte[] data = File.ReadAllBytes(Application.persistentDataPath + fileName);
这很好,除非 Android 玩家将游戏安装在 SD 卡上并且来自 Google Play 商店的更新使应用程序安装在内部存储中。这会导致 Application.persistentDataPath 是内部路径,但存档文件仍在外部路径,因此无法找到游戏存档,玩家会遇到似乎丢失进度的问题。
有没有比将保存文件存储到 PlayerPrefs 更好的方法来处理这个问题?我真的很喜欢能够向玩家询问他们的保存文件,以防万一出现问题,这样他们就可以将其发送给我。
最佳答案
在PlayerPrefs中存储文件路径
与其将整个文件存储在 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 中,这样它就可以“正常工作”(即没有必要拥有它作为一个单独的文件)。
关于android - 更新时的 Unity persistentDataPath 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925065/