【问题标题】:Admob runtime issue - Unity / iOS Build - Rewarded Ad runs once / 2nd run causing issuesAdmob 运行时问题 - Unity / iOS 构建 - 奖励广告运行一次/第二次运行导致问题
【发布时间】:2017-06-17 03:19:58
【问题描述】:

希望有人能帮我解决这个异常!

这里有一些背景信息:我正在使用玩家死亡时触发的奖励广告。这会加载一个“rewardAd”弹出窗口,供玩家选择观看视频以获得奖励或关闭请求并结束游戏。在游戏的初始运行中,它运行良好。奖励是获得额外的生命并继续玩游戏。这也很好用。

但是...当玩家第二次死亡时,会显示“rewardAd”弹出窗口,但是当单击“播放广告”按钮时,弹出窗口会消失,使游戏处于暂停状态...从这里开始,仍然显示在屏幕上的暂停按钮处于活动状态,单击时会弹出“暂停”弹出菜单。如果点击恢复游戏按钮,“rewardAd”弹窗将再次显示...如果这次点击“播放广告”按钮,广告将再次运行。

所以这个问题似乎会在玩家第一次死亡时运行广告,但第二次只会让游戏处于暂停状态......除非你点击暂停按钮以调出“暂停”弹出菜单然后从该菜单继续,该菜单再次返回“rewardAd”弹出窗口,然后这一次广告确实加载并再次运行,一切都恢复正常。

所以我的问题是,为什么当我第二次死亡时视频广告不能正确加载,除非我暂停游戏(处于其已经暂停的状态)然后恢复并再次获得rewardAd弹出窗口然后它会再次投放广告。

由于某种原因,它只会在“rewardAd”弹出窗口被重新触发两次时重新加载视频广告。

这是我的代码:

在播放器类中:

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

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

现在“rewardAdPopup”有两个按钮“播放”和“关闭”,分别在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 ();
}

现在我在“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”:

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 中的“播放”按钮的“OnClick”设置有关,但我不确定。

任何帮助将不胜感激!这让我很难过……

【问题讨论】:

    标签: c# ios admob unity5


    【解决方案1】:

    你的方法showAd在这行有问题

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

    每次播放广告时,您都会添加另一个事件处理程序。从外观上看,Admob.Instance 是一个单身人士。

    作为另一个建议,请使用 fixedUpdate 仅用于物理。

    【讨论】:

    • 好的,谢谢。我对这一切都很陌生,所以我的专业知识非常业余。所以要解决这个问题,用“-=”代替“+=”行吗?
    • 另外,如果不是“health=0”,当玩家死亡时,我将如何构造调用“RewardAdPopup”?在“fixedUpdate”中。
    • @MishoMilicevic 在 Unity 中有 Update 方法和 FixedUpdate 方法。建议使用 FixedUpdate 进行物理计算。
    • @MishoMilicevic 对于事件处理程序的问题,我建议使用AwakeStart 方法,它们在脚本的生命周期中只调用一次,并在那里添加事件处理程序。跨度>
    • 谢谢!我将尝试正确实施并回复您。
    猜你喜欢
    • 2022-10-05
    • 2022-12-18
    • 1970-01-01
    • 2020-04-23
    • 2019-09-26
    • 1970-01-01
    • 2021-12-21
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多