1

好的,所以我们正在使用 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 脚本时,另一个广告会在 2 分钟左右加载,另一个会在 5 分钟后加载。一旦我们取消广告,五分钟左右就没有延迟。

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

4

1 回答 1

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 视图...

再说一次,我可能是错的,但这就是我的理解......

于 2014-11-15T12:39:27.473 回答