2014-02-21 58 views
1

好的,所以我们使用adbannerview中建立的统一。我们使用的基本代码Unity 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; 
} 

而现在一旦旗帜出十秒钟,我们呼吁我们呼吁销毁,将来自两个事件退订,然后破坏脚本和游戏对象空,这是上。我知道这有点极端,但由于某种原因,在我们的应用程序中,它会在游戏开始时显示横幅,但由于某种原因5分钟后它会变得非常滞后,并且我已经指出它是某种东西试图接收另一个广告。因为当我们没有完全销毁adbanner脚本时,另一个广告会在5分钟左右加载两分钟,另一个广告会加载另一个广告。一旦我们将广告关闭,五分钟左右就没有滞后。

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

+0

我有类似的问题控制在Unity中的AdBannerView。可见设置为false似乎只有时才有效。将横幅设置为空似乎使横幅不能在新场景上点击。你在这个问题上有什么进展? –

+0

Nunery,完全没有。这是一个非常糟糕的系统。这是我想出的(可能不是100%正确的)。它不通过统一控制。一旦你开始收听IAds,无论你在Unity中做什么,它都会继续发送它们。我还谈到了ItunesConnect的支持,它无法解决问题,并告诉我提交一张开发者app.apple的票,我这样做。他们回答说,他们不处理IAd,因为它是第三方。 不幸的是,自从我开始工作以来,我无法深入挖掘。 – Beastwood

+0

我结束了使用Prime31插件为了得到我的应用程序所需的控制。 –

回答

0

我可能是错在这里也不过它是如何在我看来,就是当你调用

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

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

所以,当你销毁脚本时,你会失去对该对象的引用,但该对象仍然会在你的触及范围之外。所以,现在,下次启动运行时,它会在Unity之外创建另一个对象,并实际上在对方上方显示2个横幅。所以越多次你打电话给banner = new line,你的项目开始加载越来越多的横幅会越慢。根据我的理解,你打算使用这个系统的方式是在你进入主菜单之前有一个引导场景。在那个只能装载一次的场景中,你在那里创建你的旗帜,并设置对象在装载时不破坏。从那里你只设置它的可见性,但永远不会摧毁它。

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

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