如何在Unity中底部UI导航栏上方显示AdMob自适应横幅?

问题描述 投票:0回答:1

图片-1

你好, 我目前正在 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 导航栏上方的方法?

任何帮助将不胜感激!

unity-game-engine admob
1个回答
0
投票

试试下面的方法,一定会有帮助的。

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);
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.