将Unity游戏的进度保存在独立存储中

时间:2014-09-02 01:57:44

标签: c# unity3d windows-8.1 unityscript modern-ui

我正在构建一个针对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'?

有没有办法可以使用&#39;等待&#39;运营商莫名其妙?

我想如果我在将项目导出到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
    }
}

3 个答案:

答案 0 :(得分:1)

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

其他人已经想出如何“欺骗”Unity让你间接调用异步函数。 UnityAnswers

列出了一种此类方法

答案 1 :(得分:1)

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

PlayerPrefs.SetString("Player Name", "Foobar");

答案 2 :(得分: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();