Unity MobAd 奖励视频无法正常运行

Unity MobAd Rewarded Video is not functioning

我遇到了一个奇怪的问题。我已经在我的游戏中实现了广告代码,当我的玩家死亡时,我要求玩家观看广告并重生。当我构建 apk 并将其安装到我的 phone 时,在第一次播放时一切正常。第二次尝试后,我的 rewarderAdd.OnAdRewarded 函数根本不起作用。我在游戏中控制广告状态,在第二次播放时,我可以看到奖励系统没有运行。这是我的代码

  void Start()
    {
        adState = 0;
        gameOverScript = GameObject.Find("GameOver").GetComponent<GameOverCode>();
        kingSCript = GameObject.FindGameObjectWithTag("Player").GetComponent<RedKing>();
        isCompleted = false;
        RequestRewardedVideo();
        this.rewardedAd.OnAdRewarded += RewardPlayer;
       // this.rewardedAd.OnAdClosed += PlayerClosed;


    }

    public void RequestRewardedVideo()
    {
        rewardedAd = RewardBasedVideoAd.Instance;
        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request,rewarderID);
        if(rewardedAd.IsLoaded() == true)
        {
            adState = 5;
        }


    }
    private void RewardPlayer(object sender, EventArgs e)
    {
        isCompleted = true;
        adState = 1;
        Reward();
    }

    private void PlayerClosed(object sender, EventArgs e)
    {
        if(adState != 1)
        {
            adState = -1;
        }
    }


    public void Reward()
    {
        adState = 1;
        kingSCript.Reborn();
    }
    public void ShowVideoRewardAd()
    {
        if (this.rewardedAd.IsLoaded())
        {
            adState = 2;
            isLoaded = true;
            this.rewardedAd.Show();
        }
        else
        {
            isLoaded = false;
        }
    }

为什么广告状态在第二次尝试时不起作用?每次我重新上传场景时,每个代码都应该像第一次一样工作,但它根本不起作用!

解决方案是对所有方法使用 -= 函数。检查此脚本

    void Start()
{

    gameOverScript = GameObject.Find("GameOver").GetComponent<GameOverCode>();
    kingScript = GameObject.FindGameObjectWithTag("Player").GetComponent<RedKing>();
    adState = 0;
    rewardedID = "ca-app-pub-3940256099942544/5224354917";
    rewardedAd = RewardBasedVideoAd.Instance;
    isAdLoaded = false;
    RequestRewardedAd();
}


void Update()
{
    Debug.Log(adState);
    if (rewardedAd.IsLoaded())
    {
        isAdLoaded = true;
        Debug.Log("burda");
    }
    if(adState == 1)
    {
        kingScript.Reborn();
    }

    if(adState == -1)
    {
        gameOverScript.FinishTheGame();
    }
    
}



public void RequestRewardedAd()
{
    AdRequest request = AdRequestBuild();
    rewardedAd.LoadAd(request, rewardedID);

    rewardedAd.OnAdLoaded += this.HandleOnRewardedAdLoaded;
    rewardedAd.OnAdRewarded += this.HandleOnAdRewarded;
    rewardedAd.OnAdClosed += this.HandleOnRewardedAdClosed;
}

public void HandleOnRewardedAdLoaded(object sender, EventArgs args)
{
    Debug.Log("loaded");
    adState = 3;
}
public void HandleOnAdRewarded(object sender, EventArgs args)
{
    adState = 1;
    
}
public void HandleOnRewardedAdClosed(object sender, EventArgs args)
{
    rewardedAd.OnAdLoaded -= this.HandleOnRewardedAdLoaded;
    rewardedAd.OnAdRewarded -= this.HandleOnAdRewarded;
    rewardedAd.OnAdClosed -= this.HandleOnRewardedAdClosed;
    if(adState != 1)
    {
        playerAdCount = PlayerPrefs.GetInt("PlayerDontWatchTheAds");
        playerAdCount++;
        PlayerPrefs.SetInt("PlayerDontWatchTheAds", playerAdCount);
        adState = -1;
    }
}
public void ShowRewardAd()
{

    if (rewardedAd.IsLoaded())
    {
        rewardedAd.Show();
    }
}

AdRequest AdRequestBuild()
{
    return new AdRequest.Builder().Build();
}