如何检查广告是否已在 Unity 中完成
How to check if an advertisement has finished in Unity
我正在统一使用来自 admob 的奖励视频广告。当玩家死亡并询问他们是否想观看要复活的广告时,广告会被调用。我正在尝试检查广告何时结束,以便奖励玩家。
void Update()
{
if(isCalled == true){
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.LoadAd(request, adUnitId);
showAd(rewardBasedVideo);
}
}
public void showAd(RewardBasedVideoAd rewardBasedVideo)
{
if (rewardBasedVideo.IsLoaded())
{
//Subscribe to Ad event
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
rewardBasedVideo.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
//Reawrd User here
print("User rewarded with: " + amount.ToString() + " " + type);
isCalled = false;
managerScript.revival();
managerScript.Loading.SetActive(false);
}
第一次在场景中观看广告时调用方法 revival 并关闭加载屏幕,一切正常,之后再次观看广告时它不起作用,"HandleRewardBasedVideoRewarded"方法没有被调用,一个新的广告只是弹出来一遍又一遍地观看。我该如何解决它,因为当广告第二次结束时游戏没有调用 "HandleRewardBasedVideoRewarded" 方法。所以方法 revival 被调用并且加载屏幕像第一次打开游戏时一样关闭。
注意:即使场景重启(不是整个游戏),问题仍然存在。
更新:
我已经将脚本编辑为您的解决方案,但问题仍然存在。为什么它不起作用?
这是完整的脚本:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using GoogleMobileAds;
using GoogleMobileAds.Api;
using UnityEngine.Advertisements;
public class GameAdvertising : MonoBehaviour {
public bool isCalled;
public GameObject Manager;
GameManager managerScript;
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = null;
void Start () {
managerScript = gameObject.GetComponent<GameManager>();
isCalled = false;
//Subscribe to Ad event once
rewardBasedVideo = RewardBasedVideoAd.Instance;
//Subscribe to Ad event once
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
public void adButton()
{
isCalled = true;
}
void Update()
{
if(isCalled == true){
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.LoadAd(request, adUnitId);
showAd();
}
}
public void showAd()
{
if (rewardBasedVideo.IsLoaded())
{
rewardBasedVideo.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
//Reawrd User here
print("User rewarded with: " + amount.ToString() + " " + type);
isCalled = false;
managerScript.revival();
managerScript.Loading.SetActive(false);
}
}
可能是因为您在不止一次调用 rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
时注册了多次活动。您应该从那里删除它并将其放在 Start 函数中。
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = null;
void Start()
{
//Subscribe to Ad event once
rewardBasedVideo = RewardBasedVideoAd.Instance;
//Subscribe to Ad event once
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
public void adButton()
{
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.LoadAd(request, adUnitId);
showAd();
}
void Update()
{
}
public void showAd()
{
print("IN showAd()");
if (rewardBasedVideo.IsLoaded())
{
print("IN showAd() AND IsLoaded()");
rewardBasedVideo.Show();
}else{
print("IN showAd() NOT IsLoaded()");
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
print("IN HandleRewardBasedVideoRewarded()");
IsLoaded()
string type = args.Type;
double amount = args.Amount;
//Reawrd User here
print("User rewarded with: " + amount.ToString() + " " + type);
managerScript.revival();
managerScript.Loading.SetActive(false);
}
public void OnDestroy()
{
//Un-Subscribe to Ad event once
rewardBasedVideo.OnAdRewarded -= HandleRewardBasedVideoRewarded;
}
我正在统一使用来自 admob 的奖励视频广告。当玩家死亡并询问他们是否想观看要复活的广告时,广告会被调用。我正在尝试检查广告何时结束,以便奖励玩家。
void Update()
{
if(isCalled == true){
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = RewardBasedVideoAd.Instance;
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.LoadAd(request, adUnitId);
showAd(rewardBasedVideo);
}
}
public void showAd(RewardBasedVideoAd rewardBasedVideo)
{
if (rewardBasedVideo.IsLoaded())
{
//Subscribe to Ad event
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
rewardBasedVideo.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
//Reawrd User here
print("User rewarded with: " + amount.ToString() + " " + type);
isCalled = false;
managerScript.revival();
managerScript.Loading.SetActive(false);
}
第一次在场景中观看广告时调用方法 revival 并关闭加载屏幕,一切正常,之后再次观看广告时它不起作用,"HandleRewardBasedVideoRewarded"方法没有被调用,一个新的广告只是弹出来一遍又一遍地观看。我该如何解决它,因为当广告第二次结束时游戏没有调用 "HandleRewardBasedVideoRewarded" 方法。所以方法 revival 被调用并且加载屏幕像第一次打开游戏时一样关闭。 注意:即使场景重启(不是整个游戏),问题仍然存在。
更新: 我已经将脚本编辑为您的解决方案,但问题仍然存在。为什么它不起作用? 这是完整的脚本:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using GoogleMobileAds;
using GoogleMobileAds.Api;
using UnityEngine.Advertisements;
public class GameAdvertising : MonoBehaviour {
public bool isCalled;
public GameObject Manager;
GameManager managerScript;
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = null;
void Start () {
managerScript = gameObject.GetComponent<GameManager>();
isCalled = false;
//Subscribe to Ad event once
rewardBasedVideo = RewardBasedVideoAd.Instance;
//Subscribe to Ad event once
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
public void adButton()
{
isCalled = true;
}
void Update()
{
if(isCalled == true){
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.LoadAd(request, adUnitId);
showAd();
}
}
public void showAd()
{
if (rewardBasedVideo.IsLoaded())
{
rewardBasedVideo.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
//Reawrd User here
print("User rewarded with: " + amount.ToString() + " " + type);
isCalled = false;
managerScript.revival();
managerScript.Loading.SetActive(false);
}
}
可能是因为您在不止一次调用 rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
时注册了多次活动。您应该从那里删除它并将其放在 Start 函数中。
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = null;
void Start()
{
//Subscribe to Ad event once
rewardBasedVideo = RewardBasedVideoAd.Instance;
//Subscribe to Ad event once
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
public void adButton()
{
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.LoadAd(request, adUnitId);
showAd();
}
void Update()
{
}
public void showAd()
{
print("IN showAd()");
if (rewardBasedVideo.IsLoaded())
{
print("IN showAd() AND IsLoaded()");
rewardBasedVideo.Show();
}else{
print("IN showAd() NOT IsLoaded()");
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
print("IN HandleRewardBasedVideoRewarded()");
IsLoaded()
string type = args.Type;
double amount = args.Amount;
//Reawrd User here
print("User rewarded with: " + amount.ToString() + " " + type);
managerScript.revival();
managerScript.Loading.SetActive(false);
}
public void OnDestroy()
{
//Un-Subscribe to Ad event once
rewardBasedVideo.OnAdRewarded -= HandleRewardBasedVideoRewarded;
}