2017-06-17 42 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'方法。建议将固定更新用于物理学解释。 –