在隔离存储中保存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
}
}
是否需要使用隔离存储。在统一中保存游戏的最简单方法是使用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();