Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在iOS上未调用OnDisable和OnDestroy_C#_Unity3d - Fatal编程技术网

C# 在iOS上未调用OnDisable和OnDestroy

C# 在iOS上未调用OnDisable和OnDestroy,c#,unity3d,C#,Unity3d,OnDisable和OnDestroy不会在iOS上被调用。我在monobhavior对象中添加了这两种方法,当游戏结束时,它们会被销毁 我在游戏结束时存储的数据在下一次游戏启动时不可用。所以,我意识到这两种方法都不起作用 有什么解决办法吗 void OnDisable() { Debug.Log("*************************** OnDisable"); DataStorage.StoreLastOpenedDay(DateTime.Now.Da

OnDisable和OnDestroy不会在iOS上被调用。我在
monobhavior
对象中添加了这两种方法,当游戏结束时,它们会被销毁

我在游戏结束时存储的数据在下一次游戏启动时不可用。所以,我意识到这两种方法都不起作用

有什么解决办法吗

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);
 }

脚本被销毁时,将调用
OnDisable
ondestory
函数。当你退出游戏时,他们不应该被呼叫。在移动设备上退出游戏时,脚本通常不会被销毁。游戏只是暂停<当您退出应用程序时,code>OnDisable和
ondestory
可以在独立版本上工作,但这不是它的用途,因此可能无法在移动设备上工作

和功能用于检测您何时退出和返回应用程序。使用
OnDisable
OnDestroy
仅检测所连接的脚本或游戏对象何时被销毁,而不是在您按下home按钮或退出应用程序时


脚本被销毁时,将调用
OnDisable
ondestory
函数。当你退出游戏时,他们不应该被呼叫。在移动设备上退出游戏时,脚本通常不会被销毁。游戏只是暂停<当您退出应用程序时,code>OnDisable和
ondestory
可以在独立版本上工作,但这不是它的用途,因此可能无法在移动设备上工作

和功能用于检测您何时退出和返回应用程序。使用
OnDisable
OnDestroy
仅检测所连接的脚本或游戏对象何时被销毁,而不是在您按下home按钮或退出应用程序时

您可以尝试使用而不是
OnDestroy()
OnDisable()
,因为这两种方法在您关闭游戏时不会被调用,只有在您实际销毁或禁用对象时才会被调用

但是,如果您想使用应用程序退出()上的
,您应该记住一个特殊的平台设置,名为
Exit on Suspend
(关于Unity Under2017)和
后台行为(对于Unity 2017.0及更高版本)。默认情况下,此设置设置为
Suspend
,这意味着当您单击“主页”按钮时 您的应用程序不会被销毁,只会进入后台。要处理这种情况,您应该使用。如果您选择了
Destroy
行为,那么您的应用程序将在单击home按钮后被销毁,并将调用
OnApplicationQuit()

您可以尝试使用而不是
OnDestroy()
OnDisable()
,因为这两种方法在您关闭游戏时不会被调用,只有当你真的让你的对象被破坏或禁用

但是,如果您想使用应用程序退出()上的
,您应该记住一个特殊的平台设置,名为
Exit on Suspend
(关于Unity Under2017)和
后台行为(对于Unity 2017.0及更高版本)。默认情况下,此设置设置为
Suspend
,这意味着当您单击“主页”按钮时
您的应用程序不会被销毁,只会进入后台。要处理这种情况,您应该使用。如果您选择了
Destroy
行为,则在单击“主页”按钮后,您的应用程序将被销毁,并将调用
OnApplicationQuit()

阅读有关
OnApplicationQuit
的文档。您必须勾选“暂停时退出”以使游戏退出,而不是暂停,以便调用此函数。除非OP可以退出应用程序而不是挂起,否则不应使用此选项。更不用说它在Widows商店应用程序上不起作用。在哪个位置可以使用“挂起时退出”?@Programmer,不再勾选“挂起时退出”,在Unity 2017中,它被移动到“后台行为”,这是一个下拉菜单,包含3项-挂起、自定义、退出。它位于配置标题下的播放器设置中。我知道。我直接引用了医生的话。我的观点是,为了使用应用程序退出,你必须改变应用程序暂停退出的行为,这对大多数应用程序都不好,有时在windows应用程序甚至android上都不起作用。强烈推荐我在回答中提到的OnApplicationPause。根据我的要求,我决定使用OnApplicationQuit()方法,因为我只想存储一次数据。所以把这个答案标记为正确答案。但是非常感谢您给出了非常棒的回复。请阅读关于应用程序退出的文档。您必须勾选“暂停时退出”以使游戏退出,而不是暂停,以便调用此函数。除非OP可以退出应用程序而不是挂起,否则不应使用此选项。更不用说它在Widows商店应用程序上不起作用。在哪个位置可以使用“挂起时退出”?@Programmer,不再勾选“挂起时退出”,在Unity 2017中,它被移动到“后台行为”,这是一个下拉菜单,包含3项-挂起、自定义、退出。它位于配置标题下的播放器设置中。我知道。我直接引用了医生的话。我的观点是,为了使用应用程序退出,你必须改变应用程序暂停退出的行为,这对大多数应用程序都不好,有时在windows应用程序甚至android上都不起作用。强烈推荐我在回答中提到的OnApplicationPause。根据我的要求,我决定使用OnApplicationQuit()方法,因为我只想存储一次数据。所以把这个答案标记为正确答案。但是非常感谢你给了我非常棒的回复。
void OnApplicationPause(bool pauseStatus)
{
    if (pauseStatus)
    {
        Debug.Log("Paused");
    }
    else
    {
        Debug.Log("resumed");
    }
}

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