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
相关产品推荐
相关产品推荐

