c# - Unity - 多次调用广告
问题描述
我在使用 Unity 的广告时遇到了这个问题。具体看视频后点击X按钮关闭视频,我应该把奖品给玩家(进入下一关)。问题是 OnUnityAdsDidFinish 函数多次调用 if (showResult == ShowResult.Finished) 。我究竟做错了什么?如何调用 FindObjectOfType () .LoadNextLevel () 函数一次;? 先感谢您
public class UnityAdsInterstitial : MonoBehaviour, IUnityAdsListener
{
private string gameID = "******";
//nome scelto nella DashBoard di Unity
private string interstitialID = "interstitial";
private string myPlacementId = "rewardedVideo";
public int randomHighValue = 30;
private bool TestMode = true;
private bool adsClosed = false;
public Button _button;
private void Awake()
{
_button = GetComponent<Button>();
}
void Start()
{
Debug.Log("Ads start");
_button = GameObject.Find("StartAds").GetComponent<Button>();
_button.interactable = Advertisement.IsReady(myPlacementId);
if (_button) _button.onClick.AddListener(ShowRewardedVideo);
Advertisement.Initialize(gameID, TestMode);
Advertisement.AddListener(this);
if (adsClosed)
{
adsClosed = false;
}
}
public void ShowInterstitial()
{
if (Advertisement.IsReady(interstitialID) )
{
Advertisement.Show(interstitialID);
}
}
public void ShowRewardedVideo()
{
if (Advertisement.IsReady(myPlacementId))
{
Debug.Log("Rewarded video is Ready");
Advertisement.Show(myPlacementId);
}
else
{
Debug.Log("Rewarded video is not ready at the moment! Please try again later!");
}
}
public void HideBanner()
{
Advertisement.Banner.Hide();
}
public void OnUnityAdsReady(string placementdID)
{
if (placementdID == interstitialID)
{
Debug.Log("InterstitialIsReady");
}
if (placementdID == myPlacementId)
{
Debug.Log("RewardedIsReady");
_button.interactable = true;
}
}
public void OnUnityAdsDidFinish(string placementdID, ShowResult showResult)
{
if (showResult == ShowResult.Finished)
{
// Reward the user for watching the ad to completion.
if (!adsClosed)
{
adsClosed = true;
FindObjectOfType<LevelLoader>().LoadNextLevel();
}
}
else if (showResult == ShowResult.Skipped)
{
// Do not reward the user for skipping the ad.
}
else if (showResult == ShowResult.Failed)
{
Debug.LogWarning("The ad did not finish due to an error.");
}
}
public void OnUnityAdsDidError(string message)
{
Debug.Log("OnUnityAdsDidError");
}
public void OnUnityAdsDidStart(string message)
{
Debug.Log("OnUnityAdsDidStart");
}
解决方案
我会通过检查展示位置 ID 开始我的调查(以防有更多展示位置)
- 检查回调是否用于正确的展示位置 ID
if (showResult == ShowResult.Finished && placementId == myPlacementId)
{
// Reward the user for watching the ad to completion.
if (!adsClosed)
{
adsClosed = true;
FindObjectOfType<LevelLoader>().LoadNextLevel();
}
}
第二个是我只有一个UnityAdsInterstitial
. 您可以通过对象的引用在调试模式下检查这一点。如果多个实例从代码中的其他位置开始,那么您应该限制为一个。
推荐阅读
- android - 如何从我的 android 应用程序中打开 WhatsApp 组
- ios - 在 iOS 中使用 Parse Server 获取子对象和父对象的最佳方法
- javascript - 更新到 jest 24 后 transformIgnorePatterns 不起作用
- docker - 给 docker 更多的磁盘空间用于容器
- python - 从字节流读取时数据损坏
- cypress - 使用 salty- / cypress-testrail-reporter
- mysql - CASE WHEN IN ({set of numbers})
- javascript - 视差背景图像不显示在 iphone 上,但它显示在 android 上我该如何解决这个问题
- c++ - 对“ParMETIS_V3_PartMeshKway”的未定义引用
- c# - 如何使用图标呈现数据绑定的 WinForms DataGridView 列?