Unity3d 失去獲取焦點,暫停
阿新 • • 發佈:2017-10-29
焦點
目前在用tolua進行項目開發,C#與lua交互的部分消息使用了註冊監聽處理,監聽方法均放到Update方法裏面進行處理,問題在於失去焦點後Update方法將不繼續執行,這就導致了監聽方法未能及時調用。
例如:AB玩家進行紙牌遊戲,A接到電話並失去焦點,Update不執行導致消息未能及時通知服務器,此時B未能及時收到A的狀態誤以為A還在打牌狀態。
此外Android Plugins中的UnityPlayer.UnitySendMessage,經測試在強制暫停時,OnPause、OnStop周期中UnitySendMessage無效。(個人未測)
故要特殊處理這兩個方法,現改成C#直接調用lua方法,去掉監聽推送這一步。
C#: /// <summary> /// 當程序獲得或者是去焦點時 /// </summary> /// <param name="focus"></param> public void OnApplicationFocus(bool focus) { try { LuaManager.CallFunc_Void("MineMessageCenter.OnApplicationFocus", focus); } catch (System.Exception) { throw; } //Debug.logger.Log("焦點:" + focus); //if (focus) //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.GetFocusEvent); //} //else //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.LostFocusEvent); //} } /// <summary> /// 當程序暫停 /// </summary> /// <param name="focus"></param> public void OnApplicationPause(bool isPause) { try { LuaManager.CallFunc_Void("MineMessageCenter.OnApplicationPause", isPause); } catch (System.Exception) { throw; } //Debug.logger.Log("暫停:" + isPause); //if (isPause) //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.GetPauseEvent); //} //else //{ // MessageCenter.GetInstance().PostEvent(EventNameDefine.LostPauseEvent); //} }
Lua: --當程序獲得或者是去焦點時 function MineMessageCenter.OnApplicationFocus(focus) print("焦點:"..tostring(focus)); end --當程序暫停 function MineMessageCenter.OnApplicationPause(isPause) --print("暫停:"..tostring(isPause)); end
本文出自 “wo愛錢” 博客,請務必保留此出處http://mozhenrui.blog.51cto.com/11845221/1977067
Unity3d 失去獲取焦點,暫停