android - 更新时的 Unity persistentDataPath 问题

标签 android unity-game-engine

我在查找用户设备上的保存文件时遇到了问题。通常它都是这样工作的:

 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/

相关文章:

java - Android 错误登录 Twitter 失败,无法获取请求 token

java - 不断收到 "SQLiteException: no such table"异常

android - 在 Robotium 中打开 NavigationDrawer 和选择项目的正确方法

unity-game-engine - 如何安全存储有关应用内购买/Unity3D 的信息

c# - 在unity 2D c#中如何旋转像几何破折号这样的对象?

unity-game-engine - Google Cardboard 控制 PC

java - Android中如何在SQLite中插入大数据

java - Android 上的 HTTP POST 请求

c# - 使用 protobuf-net 反序列化字典

c# - 422 错误 : Python POST Request