繁体   English   中英

Unity Adbannerview不断打电话

[英]Unity Adbannerview keeps calling

好的,我们正在使用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;
}

现在,一旦横幅显示了十秒钟,我们就调用Destroy,它将取消订阅这两个事件,然后销毁脚本和空的游戏对象。 我知道这有点极端,但是由于某种原因,它会在游戏开始时显示横幅,但是由于某种原因,5分钟后它将变得很迟钝,我已经指出这是值得尝试接收另一则广告。 因为当我们没有完全销毁adbanner脚本时,另一则广告将在两分钟后加载,而另一则广告将在5分钟后加载。 而且,一旦我们撤下广告,大约五分钟就不会出现延迟。

不知道如何解决此问题。

我在这里也可能错了,但是在我看来,当你打电话时

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

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

因此,当您销毁脚本时,您会松开对该对象的引用,但该对象会持续存在。 因此,现在,下次运行Start时,它将在Unity之外创建另一个对象,并实际上在彼此之上显示2个横幅。 因此,调用banner =新行的次数越多,随着开始加载越来越多的banner,您的项目将越慢。

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

根据我从Apple对iAd的解释中了解到的情况,当您首次注册接收广告时,它会创建第二个视图并完全管理该视图。 因此,如果我理解正确,Unity也无法对其进行任何控制,并且您无法销毁它,因为Unity基本上是在子视图中运行到横幅视图,因此销毁它也会销毁您的Unity视图...

同样,我可能是错的,但这就是我的理解方式...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM