Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Admob运行时问题-Unity/iOS构建-奖励广告运行一次/2次导致问题_C#_Ios_Admob_Unity5 - Fatal编程技术网

C# Admob运行时问题-Unity/iOS构建-奖励广告运行一次/2次导致问题

C# Admob运行时问题-Unity/iOS构建-奖励广告运行一次/2次导致问题,c#,ios,admob,unity5,C#,Ios,Admob,Unity5,希望有人能帮我解决这个异常 这里有一些背景信息:我正在使用一个奖励广告,当玩家死亡时会触发。这将加载一个“rewardAd”弹出窗口,供玩家选择观看奖励视频或关闭请求,游戏结束。在游戏的初始运行中,它运行得非常完美。奖励是获得额外的生命并继续玩游戏。这也很好用 但是。。。当玩家第二次死亡时,将显示“奖赏广告”弹出窗口,但当单击“播放广告”按钮时,弹出窗口消失,使游戏处于暂停状态。。。此时,屏幕上仍显示的暂停按钮处于活动状态,单击该按钮将弹出“暂停”弹出菜单。如果点击“继续游戏”按钮,“奖励”弹出

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

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

但是。。。当玩家第二次死亡时,将显示“奖赏广告”弹出窗口,但当单击“播放广告”按钮时,弹出窗口消失,使游戏处于暂停状态。。。此时,屏幕上仍显示的暂停按钮处于活动状态,单击该按钮将弹出“暂停”弹出菜单。如果点击“继续游戏”按钮,“奖励”弹出窗口将再次显示。。。如果这次点击“播放广告”按钮,广告将再次运行

因此,这个问题似乎会在玩家第一次死亡时播放广告,但第二次只会让游戏处于暂停状态。。。除非你点击暂停按钮打开“暂停”弹出菜单,然后从该菜单继续,该菜单再次返回“奖励广告”弹出窗口,然后这一次广告再次加载并运行,一切再次正常

所以我的问题是,为什么当我第二次死亡时视频广告加载不正确,除非我暂停游戏(在已经暂停的状态下),然后继续,第二次获得奖励弹出窗口,然后它将再次运行广告

出于某种原因,只有当“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;
   //.....
}