2017-06-17 75 views
0

希望有人可以幫助我排除這種異常!Admob運行時問題 - Unity/iOS版本 - 獎勵廣告運行一次/第二次運行導致問題

所以這裏有一些背景信息:我使用的是當玩家死亡時觸發的獎勵廣告。這會加載一個「rewardAd」彈出框,讓玩家選擇觀看視頻以獲得獎勵或關閉請求,並且遊戲結束。在遊戲的最初運行中,它完美地工作。獎勵是獲得額外的生命並繼續玩遊戲。這也工作得很好。

但是,當玩家第二次死亡時,會顯示「rewardAd」彈出窗口,但當點擊「播放廣告」按鈕時,彈出消失,使遊戲處於暫停狀態......從此處,仍然顯示在屏幕上的暫停按鈕處於活動狀態,點擊時會彈出「暫停」彈出菜單。如果點擊恢復遊戲按鈕,「rewardAd」彈出窗口將再次顯示...如果此時點擊「播放廣告」按鈕,廣告將再次運行。

所以這個問題看起來會在玩家第一次死的時候運行廣告,但是第二次只會讓遊戲處於暫停狀態......除非您點擊暫停按鈕來彈出「暫停」彈出菜單,然後從該菜單中重新恢復「rewardAd」彈出窗口,然後這次廣告會重新加載並重新運行,並且所有操作都會重新開始。

所以我的問題是,爲什麼我的第二次死亡時視頻廣告沒有正確加載,除非我暫停遊戲(在其已經暫停的狀態),然後恢復並獲得rewardAd彈出窗口,然後它將再次投放廣告。

出於某種原因,只有當「rewardAd」彈出窗口重新觸發兩次時,纔會重新加載視頻廣告。

這是我爲它的代碼:

在播放器類:

void fixedUpdate() { 
    if (health == 0) { 
     helthSprite.fillAmount = 0f; 

     GameObject.Find ("RewardAdPopup").GetComponent<TweenAlpha>().PlayForward(); 
     GeneralScript.instance.pauseGame(); 
    } 
} 

現在的「rewardAdPopup」有兩個按鈕「播放」和「關閉」,這被掛上2種這兩種方法,分別在GeneralScript類:

public void showAd() 
{ 
    isRewarded = false; 
    Admob.Instance().loadRewardedVideo ("ca-app-pub-3917955116464255/1873040720"); 
    Admob.Instance().rewardedVideoEventHandler += onRewardVideoEvent; 
    if (Admob.Instance().isRewardedVideoReady()) { 
     Admob.Instance().showRewardedVideo(); 
    } 
} 

public void adDeclined() 
{ 
    Bird.instance.showGameOverPopup(); 
} 

現在我也有在「開始」法「loadVideo」實例(底部) - 否則,視頻將不會加載甚至第一次:

void Start() 
{ 
    instance = this; 
    if (Application.loadedLevelName.Equals ("GameScene")) { 
     InvokeRepeating ("IncreseSpeed", 0f, GameManager.MaxSpawnTime); 
    }  
    checkSound(); 

    Admob.Instance().loadRewardedVideo ("ca-app-pub-3917955116464255/1873040720"); 
} 

最後,在「onRewardVideoEventMethod」:

void onRewardVideoEvent(string eventName, string message) { 

    if (eventName == AdmobEvent.onAdClosed) { 

     print ("Ad Closed"); 
     if (isRewarded) { 
      print ("ad watched"); 
      Bird.instance.health = GameManager.curBirdHealth; 
      resumeGame(); 
     } else { 
      adDeclined(); 
     } 

    } else if (eventName == AdmobEvent.onRewarded) { 
     print ("Ad Rewarded"); 
     isRewarded = true; 


    } else if (eventName == AdmobEvent.adViewWillDismissScreen) { 
     if (isRewarded) { 
      print("ad dismissed"); 
      Bird.instance.health = GameManager.curBirdHealth; 
      resumeGame(); 
     } 
    } 
} 

我的地方敢肯定,就在於這裏的問題...有可能它的「播放」按鈕的「點擊」設置做在UI Button腳本下的Unity Inspector中,但我不確定。

任何幫助將不勝感激!這難倒了我...

回答

0

你的方法showAd有問題,在這條線

public void showAd() 
{ 
    //..... 
    Admob.Instance().rewardedVideoEventHandler += onRewardVideoEvent; 
    //..... 
} 

每次廣告播放您添加其他事件處理程序的時間。從它的外觀Admob.Instance是一個單身人士。

Alo作爲一個建議,只使用fixedUpdate物理。

+0

好的,謝謝。我對這一切都很陌生,所以我的技術非常業餘。所以要解決這個問題,它會使用「 - =」而不是「+ =」嗎? –

+0

另外,如果玩家不在「健康= 0」的地方死亡,我將如何構建調用「RewardAdPopup」的結構?哪個位於「fixedUpdate」中。 –

+0

@MishoMilicevic在Unity中有'Update'方法和'FixedUpdate'方法。建議將固定更新用於物理學解釋。 –