溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Unity3d 失去獲取焦點(diǎn),暫停

發(fā)布時(shí)間:2020-05-20 01:02:28 來(lái)源:網(wǎng)絡(luò) 閱讀:2392 作者:wo愛(ài)錢(qián) 欄目:編程語(yǔ)言

     目前在用tolua進(jìn)行項(xiàng)目開(kāi)發(fā),C#與lua交互的部分消息使用了注冊(cè)監(jiān)聽(tīng)處理,監(jiān)聽(tīng)方法均放到Update方法里面進(jìn)行處理,問(wèn)題在于失去焦點(diǎn)后Update方法將不繼續(xù)執(zhí)行,這就導(dǎo)致了監(jiān)聽(tīng)方法未能及時(shí)調(diào)用。

     例如:AB玩家進(jìn)行紙牌游戲,A接到電話并失去焦點(diǎn),Update不執(zhí)行導(dǎo)致消息未能及時(shí)通知服務(wù)器,此時(shí)B未能及時(shí)收到A的狀態(tài)誤以為A還在打牌狀態(tài)。

     此外Android Plugins中的UnityPlayer.UnitySendMessage,經(jīng)測(cè)試在強(qiáng)制暫停時(shí),OnPause、OnStop周期中UnitySendMessage無(wú)效。(個(gè)人未測(cè))

     故要特殊處理這兩個(gè)方法,現(xiàn)改成C#直接調(diào)用lua方法,去掉監(jiān)聽(tīng)推送這一步。

   C#:
   /// <summary>
    /// 當(dāng)程序獲得或者是去焦點(diǎn)時(shí)
    /// </summary>
    /// <param name="focus"></param>
    public void OnApplicationFocus(bool focus)
    {
        try
        {
            LuaManager.CallFunc_Void("MineMessageCenter.OnApplicationFocus", focus);
        }
        catch (System.Exception)
        {
            
            throw;
        }

        //Debug.logger.Log("焦點(diǎn):" + focus);
        //if (focus)
        //{
        //    MessageCenter.GetInstance().PostEvent(EventNameDefine.GetFocusEvent);
        //}
        //else
        //{
        //    MessageCenter.GetInstance().PostEvent(EventNameDefine.LostFocusEvent);
        //}
    }
    
       /// <summary>
    /// 當(dāng)程序暫停
    /// </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:
--當(dāng)程序獲得或者是去焦點(diǎn)時(shí)
function MineMessageCenter.OnApplicationFocus(focus)
print("焦點(diǎn):"..tostring(focus));
end 

--當(dāng)程序暫停
function MineMessageCenter.OnApplicationPause(isPause)
--print("暫停:"..tostring(isPause));
end


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI