首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity Adbannerview不断呼叫

Unity Adbannerview不断呼叫
EN

Stack Overflow用户
提问于 2014-02-22 04:32:19
回答 1查看 716关注 0票数 1

好的,我们使用的是adbannerview内置的unity。我们使用基本代码

代码语言:javascript
复制
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分钟内加载。一旦我们把广告拿掉,几乎没有五分钟的延迟。

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

EN

回答 1

Stack Overflow用户

发布于 2014-11-15 20:39:27

我在这里也可能错了,但在我看来,当您调用

代码语言:javascript
复制
banner = new ADBannerView(ADBannerView.Type.Banner, ADBannerView.Layout.Top);

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

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

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

根据我对苹果对iAd的解释,当你第一次注册接收广告时,它会创建第二个视图,并完全管理该视图。所以如果我理解正确的话,unity也不能控制它,你不能破坏它,因为Unity基本上是在横幅视图的子视图中运行,所以破坏它也会破坏你的Unity视图。

再说一次,我可能错了,但这就是我对它的理解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21944580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档