好的,所以我按照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
时代码有效,但是当我们“强制关闭”应用程序时,即使用ipads前按钮时,代码无效。需要帮助
答案 0 :(得分:1)
好的,事实证明,当我们使用移动设备上的主页按钮停止Unity游戏时,OnEnable / OnDisable方法似乎不会被我们调用或正常工作。所以我的问题解决方案是将保存代码迁移到OnApplicationPause(bool pauseStatus)
方法。经过几次测试后,每次按主屏幕时都会调用此命令,从而确保游戏自动保存。
然而,这仅修复了Android设备上的问题。有人请告诉我当IOS用户按下主页按钮时会发生什么,这样我就可以在发生这种情况时保存我的游戏。
修正了问题。经过一些调试后发现ios和.Net JIT彼此不喜欢。此代码修复了此问题:
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
}
我建议将它放在Awake()方法中。