统一。 Android系统。更新应用程序后,保存文件消失

时间:2016-10-11 17:46:51

标签: android unity3d save

我在Unity中创建非常简单的游戏,并希望保存结果,时间等。 我使用System.IO,一切正常,但当我更新我的应用程序来自' .apk'所有结果都消失了。

那么如何创建文件,更新后不会被删除?

public static void Save()
{
    string[] lines = new string[] {
        Language,
        First_Test.ToString(),
        Last_Test.ToString(),
        MakeLine(ref Attention_Results),
        MakeLine(ref Memory_Results),
        MakeLine(ref Reaction_Results),
        Attention_Best.ToString(),
        Memory_Best.ToString(),
        Reaction_Best.ToString(),
        LastSend.ToString(),
        UserName,
        FlyTime.ToString() };

    File.WriteAllLines(Application.persistentDataPath+ @"/Progres.save", lines);
}

2 个答案:

答案 0 :(得分:2)

编辑:根据您的需要,您可能希望更改潜在目录的顺序,甚至更喜欢外部存储。如果是这样,请查看@LoungeKatt answer

如果您不想使用 PlayerPrefs (我认为这是最强大的可用解决方案),您可以随时直接写入用户设备。

警告:请记住这样做远非完美的解决方案!用户可以删除和编辑您保存的文件,这更像是一种解决方法,而不是真正的答案。

无论如何,由于内部文件目录路径从一个Android设备变为另一个Android设备,您可以使用一个小脚本来查找它:

public static string GetAndroidInternalFilesDir()
{
    string[] potentialDirectories = new string[]
    {
        "/mnt/sdcard",
        "/sdcard",
        "/storage/sdcard0",
        "/storage/sdcard1"
    };

    if(Application.platform == RuntimePlatform.Android)
    {
        for(int i = 0; i < potentialDirectories.Length; i++)
        {
            if(Directory.Exists(potentialDirectories[i]))
            {
                return potentialDirectories[i];
            }
        }
    }
    return "";
}

希望这有帮助,

答案 1 :(得分:2)

三星和许多其他Android设备使用序列号作为外部sdcards的挂载点。在@ Kardux(内部存储)的内部存储答案的基础上,以下内容将支持外部存储(没有特定目录),然后搜索内部SD卡作为后备。

public static string GetAndroidInternalFilesDir()
{
    string[] potentialDirectories = new string[]
    {
        "/storage",
        "/sdcard",
        "/storage/emulated/0",
        "/mnt/sdcard",
        "/storage/sdcard0",
        "/storage/sdcard1"
    };

    if(Application.platform == RuntimePlatform.Android)
    {
        for(int i = 0; i < potentialDirectories.Length; i++)
        {
            if(Directory.Exists(potentialDirectories[i]))
            {
                return potentialDirectories[i];
            }
        }
    }
    return "";
}

注意:这假定外部存储目录首先出现在目录列表中。然后,它会根据成功的可能性优先考虑访问存储的尝试,并添加/storage/emulated/0,许多设备在无法访问/sdcard时可以访问。