你好, 我目前正在 Unity 中使用 AdMob 横幅广告,现在我想做的是将横幅放置在 UI 导航栏上方,如图所示。然而,不同尺寸的手机的定位似乎有所不同。
private float ConvertPixelsToDP(float pixels)
{
return pixels / (Screen.dpi / 160);
}
private int ConvertPixelsToDeviceScale(float pixels)
{
return Mathf.RoundToInt(pixels / MobileAds.Utils.GetDeviceScale());
}
1-)
bannerView.SetPosition(0, ConvertPixelsToDP(ConvertPixelsToDeviceScale(Screen.height - offsetY - bannerView.GetHeightInPixels())));
此方法适用于部分手机,但并非在所有设备上都能正常工作。
2-)
bannerView.SetPosition(0, ConvertPixelsToDP(ConvertPixelsToDeviceScale(Screen.height - offsetY - safeAreaTopPadding - bannerView.GetHeightInPixels())));
在这里,我尝试通过减去 safeAreaTopPadding 来处理具有凹口或不同安全区域大小的设备来考虑安全区域,但这仍然无法正常工作。
3-) 我还尝试用 ConvertPixelsToDeviceScale() 方法替换 ConvertPixelsToDP() 方法,因为我看到帖子表明 Unity 在某些情况下可能会错误计算横幅广告。
额外信息:
bannerView.SetPosition(0, 0);
当我将 y 值设置为 0 时,横幅会自动使用安全区域进行定位。
有人能解释一下bannerView.SetPosition()是如何计算位置的吗?或者建议一种在不同设备上将 AdMob 横幅正确放置在 UI 导航栏上方的方法?
任何帮助将不胜感激!
试试下面的方法,一定会有帮助的。
private void SetBannerPositionAboveNavigationBar()
{
Rect safeArea = Screen.safeArea;
float bannerHeightPx = 50f * Screen.dpi / 160f; // Assuming 50dp
float customY = safeArea.yMin + bannerHeightPx;
bannerView.SetPosition((int)(Screen.width / 2), (int)customY);
}