OnDisable和OnDestroy未在iOS上调用

时间:2017-11-10 10:18:45

标签: c# unity3d

在iOS上没有调用OnDisable和OnDestroy。我在MonoBehaviour对象中添加了这两个方法,当游戏关闭时会被销毁。

我在游戏关闭时存储的哪些数据在下次游戏发布时无法使用。所以,我意识到这两种方法都不起作用。

对此有何解决方案?

void OnDisable()
 {
     Debug.Log("*************************** OnDisable");

     DataStorage.StoreLastOpenedDay(DateTime.Now.Day);
     DataStorage.StoreLastOpenedMonth(DateTime.Now.Month);
     DataStorage.StoreLastOpenedYear(DateTime.Now.Year);
 }


 void OnDestroy()
 {
     Debug.Log("*************************** OnDestroy");

     DataStorage.StoreLastOpenedDay(DateTime.Now.Day);
     DataStorage.StoreLastOpenedMonth(DateTime.Now.Month);
     DataStorage.StoreLastOpenedYear(DateTime.Now.Year);
 }

2 个答案:

答案 0 :(得分:3)

销毁脚本时会调用

OnDisableOnDestroy函数。当你退出游戏时,它们并不意味着被召唤。当您在移动设备上退出游戏时,脚本通常不会被销毁。游戏暂停了。退出应用时,OnDisableOnDestroy可能会在独立版本上运行,但这不是它的用途,因此可能无法在移动设备上运行。

OnApplicationPauseOnApplicationFocus函数用于检测退出并返回应用的时间。 使用OnDisableOnDestroy仅检测其附加的脚本或GameObject何时被销毁,而不是在您按主页按钮或退出应用程序时。

void OnApplicationPause(bool pauseStatus)
{
    if (pauseStatus)
    {
        Debug.Log("Paused");
    }
    else
    {
        Debug.Log("resumed");
    }
}

void OnApplicationFocus(bool hasFocus)
{
    Debug.Log("resumed");
}

答案 1 :(得分:1)

您可以尝试使用OnApplicationQuit()代替OnDestroy()OnDisable(),因为当您关闭游戏时,只有当您实际让对象被销毁或禁用时,才会调用这两种方法。

但是如果你想使用OnApplicationQuit(),你应该记住名为Exit on Suspend的特殊平台设置(2017年在Unity上)和Behaviour in Background(适用于Unity 2017.0和更新版本)。默认情况下,此设置设置为Suspend,这意味着单击主页按钮时 您的应用程序不会被破坏,但只会转到后台。要处理这种情况,您应该使用OnApplicationPause()。如果您选择Destroy行为,那么点击主页按钮后您的应用就会被销毁,并且会调用OnApplicationQuit()