Unity Adbannerview不断打来电话



好的,我们使用adbannerview中构建的统一。我们使用基本代码

private ADBannerView banner = null;
void Start()
{
banner = new ADBannerView(ADBannerView.Type.Banner, ADBannerView.Layout.Top);
ADBannerView.onBannerWasClicked += OnBannerClicked;
ADBannerView.onBannerWasLoaded  += OnBannerLoaded;
}
void OnBannerClicked()
{
Debug.Log("Clicked!n");
}
void OnBannerLoaded()
{
Debug.Log("Loaded!n");
banner.visible = true;
StartCoroutine(HideBanner);
}
IEnumerator HideBanner()
{ 
yield return new WaitForSeconds(10);
banner.visible = false;
Destroy(this);
}
void OnDestroy()
{
ADBannerView.onBannerWasClicked -= OnBannerClicked;
ADBannerView.onBannerWasLoaded  -= OnBannerLoaded;
}

现在,一旦横幅显示了10秒,我们就会调用Destroy,它将取消订阅这两个事件,然后销毁它所在的脚本和空游戏对象。我知道这有点极端,但出于某种原因,在我们的应用程序中,它将在游戏开始时显示横幅,但由于某种原因,5分钟后它会变得非常滞后,我已经指出这与广告试图接收另一个有关。因为当我们没有完全销毁广告横幅脚本时,另一个广告将在两分钟左右加载,另一则在5分钟加载。一旦我们撤下广告,五分钟左右就没有延迟。

不知道如何解决这个问题。

我也可能错了,但在我看来,当你调用时

banner = new ADBannerView(ADBannerView.Type.Banner, ADBannerView.Layout.Top);

它实际上在脚本内部创建了一个变量,但在Unity外部创建了一对象。正如在由事物的Xcode端创建的视图中一样,您的Unity代码只是在它为Unity内容生成的OTHER框架内运行。

因此,当您销毁脚本时,您会丢失对该对象的引用,但该对象仍然存在于您无法访问的范围之外。所以现在,下次运行Start时,它将在Unity之外创建另一个对象,并实际显示两个横幅。因此,你调用banner=新行的次数越多,你的项目就越慢,因为它开始加载越来越多的banner。

据我所知,使用这个系统的方式是在进入主菜单之前先有一个引导场景。在只加载一次的场景中,您可以在那里创建横幅,并将对象设置为加载时不破坏。从那里你只设置它的可见性,但永远不会破坏它。

根据我从苹果对iAd的解释中了解到的,当你第一次注册接收广告时,它会创建第二个视图,并完全管理该视图。所以,如果我理解正确的话,团结也无法控制它,你不能摧毁它,因为团结基本上是在儿童视图和横幅视图中运行的,所以摧毁它也会摧毁你的团结视图。。。

再说一遍,我可能错了,但这就是我的理解…

最新更新