0

我正在构建一个针对 Windows Store 8.1 的 Unity 游戏,我需要将游戏进度保存在独立存储中。但是在访问本地存储时使用“等待”运算符会给我这个错误

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

有没有办法我可以以某种方式使用“等待”运算符?

我想如果我在将项目导出到 Windows 8.1 后生成的解决方案中实现我的 Save 方法,它会正常工作。问题是我不确定如何在主解决方案中访问统一脚本的变量和方法(保存游戏时需要)。

任何人都可以帮助这些方法中的任何一种,或者是否有更好的方法?

编辑:这是我正在使用的代码:

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
    }
}
4

3 回答 3

2

是否有必要使用隔离存储。统一保存游戏的最简单方法是使用 playerprefs。它适用于任何平台。

PlayerPrefs.SetString("玩家名称", "Foobar");

于 2014-09-03T15:33:29.023 回答
1

Unity 的 Mono/.NET 版本不支持 async/await,这就是您收到第一个错误的原因。

其他人已经想出了如何“欺骗” Unity 让您间接调用异步函数。UnityAnswers上列出了一种这样的方法

于 2014-09-02T14:48:16.413 回答
0

你可以使用这样的东西。

// 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 类是 [Serializable]。在你反序列化它之后,你可以将它的成员加载到游戏变量中。

//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();

于 2015-02-17T15:46:19.873 回答