更改场景后 Unity Admob 奖励视频听众不工作
Unity Admob Rewarded Video Listeners Not Working after changing Scene
这个问题最近一直困扰着我,以前从来没有注意到,显然,我在我的Unity3D项目中使用了admob奖励视频。
在我的项目中,我在关卡失败时奖励用户,当用户观看奖励视频时,会给予用户奖励,场景自动切换到关卡选择。当用户再次开始游戏并再次失败时,观看了视频,但没有任何反应。
经过一些调试后,我发现第二次加载游戏场景时听众没有工作。
我有一个 GamePlayManager 脚本,我在其中执行所有功能..
public class GamePlayManager : MonoBehaviour {
private RewardBasedVideoAd rewardBasedVideoAd;
void Start()
{
rewardBasedVideoAd = RewardBasedVideoAd.Instance;
RequestRewardBasedVideo ();
rewardBasedVideoAd.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
// has rewarded the user.
rewardBasedVideoAd.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
private void RequestRewardBasedVideo()
{
#if UNITY_ANDROID
string adUnitId = GameConstants.AdmobRewardedVideoID;
#elif UNITY_IPHONE
string adUnitId = GameConstants.AdmobIOSRewardedVideoID;
#else
string adUnitId = "unexpected_platform";
#endif
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideoAd.LoadAd(request, adUnitId);
}
public void showAdmobRewardedVideo()
{
if (rewardBasedVideoAd.IsLoaded())
{
rewardBasedVideoAd.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
Debug.Log ("Unity AdmobRewardGiven");
nextLevel ();
gotoLevelSelection ();
}
public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
Debug.Log ("Admob RewardedVideo FailedToLoad");
}
}
加载新场景时 GamePlayManager
被销毁。您有两个选择:
1。将DontDestroyOnLoad(gameObject);
添加到Start
函数中,以便在加载新场景时不会破坏GamePlayManager
脚本。
2。使用 -=
取消订阅 OnDestroy
函数中的事件,就像使用 +=
订阅一样。我没有看到 Admob 示例执行此操作,但您应该始终 退订您的活动。
public void OnDestroy()
{
rewardBasedVideoAd.OnAdFailedToLoad -= HandleRewardBasedVideoFailedToLoad;
rewardBasedVideoAd.OnAdRewarded -= HandleRewardBasedVideoRewarded;
}
其中任何一个都应该可以解决您的问题。如果一个失败了,就用另一个。
这个问题最近一直困扰着我,以前从来没有注意到,显然,我在我的Unity3D项目中使用了admob奖励视频。
在我的项目中,我在关卡失败时奖励用户,当用户观看奖励视频时,会给予用户奖励,场景自动切换到关卡选择。当用户再次开始游戏并再次失败时,观看了视频,但没有任何反应。
经过一些调试后,我发现第二次加载游戏场景时听众没有工作。
我有一个 GamePlayManager 脚本,我在其中执行所有功能..
public class GamePlayManager : MonoBehaviour {
private RewardBasedVideoAd rewardBasedVideoAd;
void Start()
{
rewardBasedVideoAd = RewardBasedVideoAd.Instance;
RequestRewardBasedVideo ();
rewardBasedVideoAd.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
// has rewarded the user.
rewardBasedVideoAd.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
private void RequestRewardBasedVideo()
{
#if UNITY_ANDROID
string adUnitId = GameConstants.AdmobRewardedVideoID;
#elif UNITY_IPHONE
string adUnitId = GameConstants.AdmobIOSRewardedVideoID;
#else
string adUnitId = "unexpected_platform";
#endif
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideoAd.LoadAd(request, adUnitId);
}
public void showAdmobRewardedVideo()
{
if (rewardBasedVideoAd.IsLoaded())
{
rewardBasedVideoAd.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
Debug.Log ("Unity AdmobRewardGiven");
nextLevel ();
gotoLevelSelection ();
}
public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
Debug.Log ("Admob RewardedVideo FailedToLoad");
}
}
加载新场景时 GamePlayManager
被销毁。您有两个选择:
1。将DontDestroyOnLoad(gameObject);
添加到Start
函数中,以便在加载新场景时不会破坏GamePlayManager
脚本。
2。使用 -=
取消订阅 OnDestroy
函数中的事件,就像使用 +=
订阅一样。我没有看到 Admob 示例执行此操作,但您应该始终 退订您的活动。
public void OnDestroy()
{
rewardBasedVideoAd.OnAdFailedToLoad -= HandleRewardBasedVideoFailedToLoad;
rewardBasedVideoAd.OnAdRewarded -= HandleRewardBasedVideoRewarded;
}
其中任何一个都应该可以解决您的问题。如果一个失败了,就用另一个。