从 Unity 3D 游戏保存文件到 IOS

saving files on IOS from a Unity 3D game

好的,所以我遵循了 unity3d.com(位于 here

的教程

为了让您不必或不想观看整个视频,这里是 save/load 功能。

//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 时有效,但在我们 "force close" 应用程序(即使用 ipad 正面按钮)时无效。需要帮助

好的,事实证明,当我们在移动设备上使用主页按钮停止 Unity 游戏时,方法 OnEnable/OnDisable 似乎没有调用或正常工作。所以我的解决方法是将save代码迁移到OnApplicationPause(bool pauseStatus)方法中。经过几次测试后,似乎每次您按下主屏幕时都会调用它,从而确保游戏自动保存。

然而,这只解决了 android 设备上的问题。有人请告诉我当 IOS 用户按下主页按钮时会发生什么,这样我就可以在这种情况下保存我的游戏。

已解决问题。经过一些调试后发现 ios 和 .Net JIT 不喜欢对方。此代码修复了问题:

if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
            System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
        } 

我建议将它放在 Awake() 方法中。