在隔离存储中保存Unity游戏的进度

本文关键字:游戏 Unity 保存 隔离 存储 | 更新日期: 2023-09-27 18:20:12

我正在构建一款针对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
    }
}

在隔离存储中保存Unity游戏的进度

是否需要使用隔离存储。在统一中保存游戏的最简单方法是使用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类是[Serializable]。在对其进行反序列化后,可以将其成员加载到ingame变量中。

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