从Unity 3D游戏中保存IOS上的文件

时间:2015-02-15 16:07:52

标签: c# ios unity3d

好的,所以我按照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前按钮时,代码无效。需要帮助

1 个答案:

答案 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()方法中。