Unity Adbannerview一直在打电话

时间:2014-02-21 20:32:19

标签: ios unity3d iad 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;
}

现在,当横幅显示十秒钟后,我们调用我们调用Destroy,它将取消订阅这两个事件,然后销毁脚本并清空它所在的游戏对象。我知道它有点极端,但出于某种原因,在我们的应用程序中它将在游戏开始时显示横幅,但由于某种原因5分钟之后它会变得非常迟钝而且我已经确定它是广告尝试接收另一个广告。因为当我们没有完全销毁adbanner脚本时,另一个广告将在5分钟内加载大约两分钟而另一个广告。一旦我们关闭广告,就不会有大约五分钟的延迟。

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

1 个答案:

答案 0 :(得分:0)

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

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

它实际上在该脚本中创建了一个变量,但是Unity之外的对象。在Xcode方面创建的视图中,您的Unity代码只是在为Unity内容生成的OTHER框架内运行。

因此,当您销毁脚本时,您将丢失对该对象的引用,但该对象仍然存在于您的范围之外。所以现在,下次启动Start时,它将在Unity之外创建另一个对象,并且实际上在彼此之上显示2个横幅。因此,您调用banner = new line的次数越多,项目开始加载越来越多的横幅时,项目的速度就越慢。

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

根据我从Apple对iAd的解释中所理解的,当您第一次注册接收广告时,它会创建第二个视图并完全管理该视图。因此,如果我理解正确,团结也无法控制它,你也无法销毁它,因为Unity基本上是在子视图中运行到横幅视图,因此销毁它会破坏你的Unity视图...... / p>

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