Сохранение прогресса игры 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. это работает на любой платформе.
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();