【发布时间】:2015-02-17 22:11:14
【问题描述】:
好的,所以我按照unity3d.com(位于here)上的教程进行操作
只是为了让您不必或不想观看整个视频,这里是保存/加载功能。
//This one saves/creates the file
void OnDisable()
{
BinaryFormatter binFormatter = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/savedgame.dat");
GameData data = new GameData();
data.coinAmount = coinAmount;
data.upgradeLevel = upgradeLevel;
binFormatter.Serialize(file, data);
file.Close();
}
//And this one loads it
void OnEnable()
{
if (File.Exists(Application.persistentDataPath + "/savedgame.dat"))
{
BinaryFormatter binFormatter = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/savedgame.dat",FileMode.Open);
GameData data = (GameData)binFormatter.Deserialize(file) ;
file.Close();
coinAmount = data.coinAmount;
upgradeLevel = data.upgradeLevel;
}
}
我正在使用 OnDisable/OnEnable,以便每次用户退出时我的游戏都会自动保存。这适用于 pc 和 mac,但是当我将它构建到 Ipad air2 时,它就像什么都没有发生。 Xcode 抛出一个异常,显示未知文件名(-1)。 在此先感谢您的帮助 在对 android 进行进一步调查后,发现文件被创建并且游戏从中读取数据。问题就在这里:
data.coinAmount = coinAmount;
data.upgradeLevel = upgradeLevel;
由于某种原因,当应用程序在 Android 上运行时,这不会写入正确的数据(对于 IOS 可能相同)。
当我提供硬编码值时,即:data.coinAmount = 100;,游戏就会正确读取它。
进一步调查发现,当您调用 Application.quit 时,代码可以工作,但在我们“强制关闭”应用程序(即使用 ipad 前按钮)时,该代码不起作用。需要帮助
【问题讨论】:
-
还在 android 上测试了这段代码,再次没有任何效果。该文件很简单,没有被创建。我缺少一些权限还是什么?
-
在类前加Serializable属性吗?
-
是的,否则它将无法在 linux mac 和 windows 上运行。它根本行不通。经过更多调试后,我发现我确实读取了这些文件,但由于某种原因,它们没有被正确保存。现在,如果我将安全函数中的 data.coinAmount 更改为静态 100,一切都很好。