好的,我们使用的是adbannerview内置的unity。我们使用基本代码
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秒,我们调用销毁,这将取消订阅这两个事件,然后销毁脚本和它所在的空游戏对象。我知道这有点极端,但由于某些原因,在我们的应用程序中,它会在游戏开始时显示横幅,但由于某种原因,5分钟后它会变得非常滞后,我已经准确地指出,这与试图接收另一个广告有关。因为当我们没有完全销毁adbanner脚本时,另一个广告会在两分钟左右加载,另一个在5分钟内加载。一旦我们把广告拿掉,几乎没有五分钟的延迟。
不知道如何解决这个问题。
发布于 2014-11-15 20:39:27
我在这里也可能错了,但在我看来,当您调用
banner = new ADBannerView(ADBannerView.Type.Banner, ADBannerView.Layout.Top);它实际上在脚本内部创建了一个变量,但在Unity外部创建了一个对象。就像在Xcode端创建的视图一样,Unity代码只是在它为Unity内容生成的另一个框架中运行。
因此,当您销毁脚本时,您将丢失对该对象的引用,但该对象仍然存在于您无法访问的范围之外。所以现在,下一次开始运行时,它将在Unity之外创建另一个对象,并实际在彼此的顶部显示2个横幅。因此,您调用banner = new行的次数越多,您的项目就会变得越慢,因为它开始加载越来越多的banner。
AsI理解它,你使用这个系统的方式是在你进入主菜单之前有一个引导场景。在只会加载一次的场景中,您在那里创建横幅,并将对象设置为加载时不销毁。从那里你只设置它的可见性,但永远不会破坏它。
根据我对苹果对iAd的解释,当你第一次注册接收广告时,它会创建第二个视图,并完全管理该视图。所以如果我理解正确的话,unity也不能控制它,你不能破坏它,因为Unity基本上是在横幅视图的子视图中运行,所以破坏它也会破坏你的Unity视图。
再说一次,我可能错了,但这就是我对它的理解。
https://stackoverflow.com/questions/21944580
复制相似问题