You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中获取AdMob自适应横幅真实高度的问题求助

Unity中AdMob自适应横幅真实高度获取方案

问题背景

使用Unity 2021.3.30f1 + Google Mobile Ads for Unity 8.5.2开发时,AdMob自适应横幅加载后无法获取真实高度,导致无法正确计算屏幕上其他对象的位置。

已尝试的无效方案

  • 调用bannerView.GetHeightInPixels();:模拟器中始终返回100,结果不准确,推测是横幅未完成缩放导致
  • 通过横幅宽度计算缩放比例:float scale = Screen.width/bannerView.getWidthInPixels();,但bannerView.getWidthInPixels()始终返回0
  • 查找名为"ADAPTIVE(Clone)"的GameObject,结合缩放比例与GetHeightInPixels()计算高度:模拟器有效,但真机中无法找到该对象,推测AdMob在真机环境下隐藏了该对象

疑问解答

1. 如何正确获取AdMob自适应横幅的真实高度?

必须在横幅加载完成后通过官方API获取尺寸,推荐两种可靠方式:

方式一:利用横幅加载完成回调

订阅BannerView.OnAdLoaded事件,在回调中获取真实高度:

private BannerView _bannerView;

private void InitializeBanner()
{
    _bannerView = new BannerView("你的广告单元ID", AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(Screen.width), AdPosition.Bottom);
    _bannerView.OnAdLoaded += HandleBannerLoaded;
    _bannerView.LoadAd(new AdRequest());
}

private void HandleBannerLoaded(object sender, EventArgs args)
{
    // 获取加载完成后的真实像素高度
    float realPixelHeight = _bannerView.GetHeightInPixels();
    // 或通过AdSize对象获取,支持横竖屏切换场景
    AdSize bannerSize = _bannerView.GetSize();
    float orientationAwareHeight = bannerSize.GetHeightInPixels(AdRequest.CurrentOrientation);
    
    // 此处可使用获取到的高度调整其他UI位置
}

方式二:监听尺寸变化事件

自适应横幅可能因屏幕旋转等场景改变尺寸,订阅OnAdSizeChanged事件能实时获取最新高度:

_bannerView.OnAdSizeChanged += HandleBannerSizeChanged;

private void HandleBannerSizeChanged(object sender, AdSizeChangedEventArgs args)
{
    float newRealHeight = args.NewSize.GetHeightInPixels(AdRequest.CurrentOrientation);
    // 更新UI布局逻辑
}

2. 为何相关解决方案极少?

主要有三个原因:

  • 多数开发者直接使用AdMob内置的自动布局(如固定在屏幕底部/顶部),无需手动计算高度
  • 自适应横幅的高度获取对调用时机要求严格,必须在加载完成后调用API,很多开发者因调用时机错误导致失败,却误以为API无效
  • Google Mobile Ads API版本迭代快,旧版本的解决方案不适用于8.x系列,搜索到的过时方案无法解决当前问题

内容的提问来源于stack exchange,提问作者Tobias S. Lucian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:04:58