在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);
}
答案 0 :(得分:3)
OnDisable
和OnDestroy
函数。当你退出游戏时,它们并不意味着被召唤。当您在移动设备上退出游戏时,脚本通常不会被销毁。游戏暂停了。退出应用时,OnDisable
和OnDestroy
可能会在独立版本上运行,但这不是它的用途,因此可能无法在移动设备上运行。
OnApplicationPause
和OnApplicationFocus
函数用于检测退出并返回应用的时间。 使用OnDisable
和OnDestroy
仅检测其附加的脚本或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()
。