Unity3D, Android Apk не видит файл в Application.persistantDatapath - PullRequest
0 голосов
/ 02 ноября 2019

Как сохранить данные вашего класса в единстве?

У меня есть приложение, которое использует некоторые файлы сохранения и загрузки, и они сериализуются. Я указал путь как Application.persistandDataPath в скрипте Unity C # для сохранения и загрузки некоторых данных. Это работает в режиме edito, но не в устройствах Android.

Я также изменил " ProjectSettings -> Другие настройки -> Разрешение на запись " с внутренний на внешнийSD-карта . Но ничего не изменилось.

Мое приложение не сохраняет или загружает данные в Android. Даже, андроид спрашивает у меня разрешения на запись данных на устройстве, но ничего не меняется ..

У кого-нибудь есть такая же проблема? Мне нужна помощь, я застрял с моим проектом. Или есть ли лучший способ сохранить файл или класс, который зашифрован и работает на устройствах Android? (Я не знаю, это может быть похоже на использование файла json, но он зашифрован и т. Д.)

PS: когда я открываю папку в Windows для Application.persistandDataPath, я вижу, что файл успешно создан, и я вижу файл somedata.dat существует.

Пример кода проекта:

СПОСОБ СОХРАНЕНИЯ:

public void Save()
{
    FileStream file = null;
    string path = Application.persistentDataPath + "/" + "GameFile.dat";

    try
    {
        BinaryFormatter bf = new BinaryFormatter();
        file = File.Create(path);

        if (fileData != null)
        {
            fileData.SetHighscore(highScore);            
            fileData.SetIsGameStartedFirstTime(isGameStartedFirstTime);        
            fileData.IsMusicOn(isMusicOn);           

            bf.Serialize(file, fileData);
        }
    }
    catch (Exception e)
    {
    }
    finally
    {
        if (file != null)
        {
            file.Close();
        }
    }
}

ЗАГРУЗКАМЕТОД:

public void Load()
{
    FileStream file = null;
    string path = Application.persistentDataPath + "/" + "GameFile.dat";

    try
    {
        BinaryFormatter bf = new BinaryFormatter();

        file = File.Open(path, FileMode.Open);
        fileData= (GameFile)bf.Deserialize(file);
    }
    catch (Exception e)
    {
    }
    finally
    {
        if (file != null)
        {
            file.Close();
        }
    }
}

Пример класса данных GameFile

class GameFile
{
    private bool isGameStartedFirstTime;   
    private int highScore;
    private bool isMusicOn;

    // Also setters and getters here..
}

Редактировать: было предложено использовать " Path.Combine (Application.persistentDataPath, "GameFile.dat");"вместо моего кода. Я применил это. Теперь, если я играю в игру и временно закрываю ее, нажимая среднюю кнопку на устройствах Android и открывая игру, она работает. Но работает временно, как я уже говорил. Потому что, если я полностью закрываю игру, удаляя ее из ОЗУ (нажав левую кнопку и создавая приложения на устройствах Android), она снова не работает и не запоминает мои сохраненные данные. Я предполагаю, что мы находимся в прогрессе, но все еще не смогли найти решение. Также я оба пробовал это решение для " ProjectSettings -> Другие настройки -> Разрешение на запись ", я пробовал это для внутренняя или внешняя SD-карта ничего не изменилось.

...