Unity3d OnApplicationPause与OnApplicationFocus详解

发表于2018-07-23
评论0 7k浏览
在手机游戏当中,会碰到“强制暂停”,如:锁屏、接电话或短信之类的。如果“强制暂停”时间过长,网络游戏有时得重新登录等事件。  

而Unity3d,AndroidPlugins中的UnityPlayer.UnitySendMessage,经测试在强制暂停时,OnPause、OnStop周期中UnitySendMessage无效。  

重点探索OnApplicationPause和OnApplicationFocus;  
OnApplicationPause,当程序暂停;  
OnApplicationFocus,当程序获得或失去焦点;  

经测试:  
强制暂停时,先OnApplicationPause,后OnApplicationFocus;  
重新“启动”手机时,先OnApplicationFocus,后OnApplicationPause;  

思路:  
定义两个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
}

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引