在手机游戏当中,会碰到“强制暂停”,如:锁屏、接电话或短信之类的。如果“强制暂停”时间过长,网络游戏有时得重新登录等事件。
而Unity3d,Android Plugins中的UnityPlayer.UnitySendMessage,经测试在强制暂停时,OnPause、OnStop周期中UnitySendMessage无效。
重点探索OnApplicationPause和OnApplicationFocus;
OnApplicationPause,当程序暂停;
OnApplicationFocus,当程序获得或失去焦点;
经测试:
强制暂停时,先 OnApplicationPause,后 OnApplicationFocus;
重新“启动”手机时,先OnApplicationFocus,后 OnApplicationPause;
思路:
1,定义两个bool
isPause=false;
isFocus=false;
在
OnEnable();初始化:
void OnEnable(){
isPause=false;
isFocus=false;
}
void OnApplicationPause(){
#if UNITY_IPHONE || UNITY_ANDROID
Debug.Log("OnApplicationPause "+isPause+" "+isFocus);
if(!isPause)
{
// 强制暂停时,事件
pauseTime();
}
else
{
isFocus=true;
}
isPause=true;
#endif
}
void OnApplicationFocus(){
#if UNITY_IPHONE || UNITY_ANDROID
Debug.Log("OnApplicationFocus "+isPause+" "+isFocus);
if(isFocus)
{
// “启动”手机时,事件
resumeList();
isPause=false;
isFocus=false;
}
if(isPause)
{
isFocus=true;
}
#endif
}
本文探讨了手机游戏中的强制暂停问题,特别是Unity3D环境下UnitySendMessage在强制暂停期间的失效。通过分析OnApplicationPause和OnApplicationFocus方法的工作流程,提出了使用bool变量来跟踪暂停和聚焦状态的解决方案,以确保游戏在不同状态下的正确行为。
1154

被折叠的 条评论
为什么被折叠?



