更新时Unity persistentDataPath问题

时间:2017-01-29 19:33:17

标签: android unity3d

我在用户设备上找到savefiles时遇到了问题。通常它都是这样的:

 if (File.Exists(Application.persistentDataPath + fileName)) {
            byte[] data = File.ReadAllBytes(Application.persistentDataPath + fileName);

这很好,除了Android玩家将游戏安装在SD卡上并且Google Play商店的更新使应用程序安装在内部存储中。这会导致Application.persistentDataPath成为内部路径,但是savefile仍然在外部路径上,因此无法找到savegame并且玩家有问题他们似乎失去了进度。

除了将保存文件存储到PlayerPrefs中之外,还有更好的方法吗?我真的很想能够向玩家询问他们的存档文件以防万一有问题,所以他们可以把它发给我。

1 个答案:

答案 0 :(得分:2)

将文件路径存储在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中存储您需要的任何内容,这样它就可以“正常工作”(即不需要它作为单独的文件)。