C# Admob运行时问题-Unity/iOS构建-奖励广告运行一次/2次导致问题
希望有人能帮我解决这个异常 这里有一些背景信息:我正在使用一个奖励广告,当玩家死亡时会触发。这将加载一个“rewardAd”弹出窗口,供玩家选择观看奖励视频或关闭请求,游戏结束。在游戏的初始运行中,它运行得非常完美。奖励是获得额外的生命并继续玩游戏。这也很好用 但是。。。当玩家第二次死亡时,将显示“奖赏广告”弹出窗口,但当单击“播放广告”按钮时,弹出窗口消失,使游戏处于暂停状态。。。此时,屏幕上仍显示的暂停按钮处于活动状态,单击该按钮将弹出“暂停”弹出菜单。如果点击“继续游戏”按钮,“奖励”弹出窗口将再次显示。。。如果这次点击“播放广告”按钮,广告将再次运行 因此,这个问题似乎会在玩家第一次死亡时播放广告,但第二次只会让游戏处于暂停状态。。。除非你点击暂停按钮打开“暂停”弹出菜单,然后从该菜单继续,该菜单再次返回“奖励广告”弹出窗口,然后这一次广告再次加载并运行,一切再次正常 所以我的问题是,为什么当我第二次死亡时视频广告加载不正确,除非我暂停游戏(在已经暂停的状态下),然后继续,第二次获得奖励弹出窗口,然后它将再次运行广告 出于某种原因,只有当“rewardAd”弹出窗口重新触发两次时,才会重新加载视频广告 以下是我的代码: 在玩家类中:C# Admob运行时问题-Unity/iOS构建-奖励广告运行一次/2次导致问题,c#,ios,admob,unity5,C#,Ios,Admob,Unity5,希望有人能帮我解决这个异常 这里有一些背景信息:我正在使用一个奖励广告,当玩家死亡时会触发。这将加载一个“rewardAd”弹出窗口,供玩家选择观看奖励视频或关闭请求,游戏结束。在游戏的初始运行中,它运行得非常完美。奖励是获得额外的生命并继续玩游戏。这也很好用 但是。。。当玩家第二次死亡时,将显示“奖赏广告”弹出窗口,但当单击“播放广告”按钮时,弹出窗口消失,使游戏处于暂停状态。。。此时,屏幕上仍显示的暂停按钮处于活动状态,单击该按钮将弹出“暂停”弹出菜单。如果点击“继续游戏”按钮,“奖励”弹出
void fixedUpdate () {
if (health == 0) {
helthSprite.fillAmount = 0f;
GameObject.Find ("RewardAdPopup").GetComponent<TweenAlpha> ().PlayForward ();
GeneralScript.instance.pauseGame();
}
}
现在,我在“start”方法中也有了“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”:
我确信问题就在这里的某个地方。。。它可能与UI按钮脚本下Unity Inspector中“播放”按钮的“OnClick”设置有关,但我不确定
任何帮助都将不胜感激!这让我感到困惑…您的方法
showAd
在这一行中存在问题
public void showAd ()
{
//.....
Admob.Instance ().rewardedVideoEventHandler += onRewardVideoEvent;
//.....
}
每次播放广告时,您都会添加另一个事件处理程序。从外观上看,Admob.Instance
是一个单例
Alo作为另一个建议,仅对物理使用
fixedUpdate
好的,谢谢。我对这一切都是新手,所以我的技术相当业余。为了解决这个问题,用“-=”代替“+=”行吗?还有,如果不是在“health=0”的位置,当玩家死亡时,我如何构造调用“RewardAdPopup”?它在“FixeUpdate”中。@MishoMilicevic在统一中有Update
方法和fixeUpdate
方法。建议将FixedUpdate用于物理计算。@MishoMilicevic对于事件处理程序问题,我建议使用Awake
或Start
方法,这些方法在脚本的生命周期中只调用一次,并在那里添加事件处理程序。谢谢!我将尝试正确地实现这一点,然后再与您联系。
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 ();
}
}
}
public void showAd ()
{
//.....
Admob.Instance ().rewardedVideoEventHandler += onRewardVideoEvent;
//.....
}