Сохранение прогресса игры Unity в изолированном хранилище

Я создаю игру Unity для Windows Store 8.1, и мне нужно сохранить прогресс игры в изолированном хранилище. Но использование оператора 'await' при доступе к локальному хранилищу дает мне эту ошибку

'await' requires that the type 'Windows.Foundation.IAsyncOperation<Windows.Storage.StorageFile>' have a suitable GetAwaiter method. Are you missing a using directive for 'System'?

Есть ли способ, которым я могу использовать оператор "ждать" как-нибудь?

Я подумал, что если я реализую свой метод Save в решении, созданном после экспорта проекта в Windows 8.1, он будет работать нормально. Проблема в том, что я не уверен, как получить доступ к переменным и методам (необходимым для сохранения игры) сценария Unity в основном решении.

Может ли кто-нибудь помочь с любым из этих подходов или есть лучший?

РЕДАКТИРОВАТЬ: Вот код, который я использую:

public async void save_game()
{
    StorageFile destiFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("Merged.png", CreationCollisionOption.ReplaceExisting);
    using (IRandomAccessStream stream = await destiFile.OpenAsync(FileAccessMode.ReadWrite))
    {
        //you can manipulate this stream object here
    }
}

3 ответа

Решение

Нужно ли использовать изолированное хранилище. Самый простой способ сохранить игру в единстве - использовать playerprefs. это работает на любой платформе.

PlayerPrefs.SetString ("Имя игрока", "Foobar");

Unity-версия Mono/.NET не поддерживает async/await, поэтому вы получаете первую ошибку.

Другие придумали, как "обмануть" Unity, чтобы позволить вам косвенно вызывать асинхронные функции. Один такой метод указан на UnityAnswers

Вы могли бы использовать что-то вроде этого.

// this is for loading
    BinaryFormatter binFormatter = new BinaryFormatter();
                string filename = Application.persistentDataPath + "/savedgame.dat";
                FileStream file = File.Open(filename, FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
                GameData data = (GameData)binFormatter.Deserialize(file) ;
                file.Close();

где класс GameData [Сериализуемый]. и после десериализации вы можете загрузить его члены в игровые переменные.

//And this is for saving
BinaryFormatter binFormatter = new BinaryFormatter();
        string filename = Application.persistentDataPath + "/savedgame.dat";
        FileStream file = new FileStream(filename, FileMode.Create,FileAccess.Write,FileShare.ReadWrite);
        GameData data = new GameData();

// здесь это будет что-то вроде data.health = player.health file.Close();

Другие вопросы по тегам