2

我已经绞尽脑汁一个星期了,现在左右尝试,我似乎找不到答案。我实际上可能还有更多问题。

我们有一个应用程序,它在其中一个活动中使用 Unity 视图来呈现一些图形。由于这是一个普通的应用程序,而不是一个游戏,我们想要删除沉浸式模式和全屏,这样我们就可以恢复系统栏(状态和导航)

现在,自从最新版本的 Unity 以来,他们Start in fullscreen mode在 Android 的播放器设置中添加了该选项。问题是上面的选项只带回导航栏。

下一步是尝试使用一些原生的 Android 编码。所以基本上是这样 this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 的:完成工作并带回状态栏。

现在,在我使用高宽比(18.5:9 - Pixel 3 XL - Android 9)设备之前,这就像一个魅力。

如果我简单地使用 Unity 全屏选项,图形可以很好地缩放,但我没有状态栏,这对于缺口手机来说更加明显:

在此处输入图像描述

如果我从 Android 中删除全屏标志,那么我会恢复状态栏,但渲染会中断:

在此处输入图像描述

???是出现的黑色区域。

抱歉,我无法向您展示实际的应用程序。

现在,我玩弄了所谓的“沉浸式模式”的其他标志:

// When init of Unity
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.showSystemUi();
this.addUiVisibilityChangeListener();

// What the above does
private static int getLowProfileFlag() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
            View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
            View.SYSTEM_UI_FLAG_FULLSCREEN : View.SYSTEM_UI_FLAG_LOW_PROFILE;
}

private void showSystemUi() {
    this.mUnityPlayer.setSystemUiVisibility(this.mUnityPlayer.getSystemUiVisibility() & ~getLowProfileFlag());
}

private void addUiVisibilityChangeListener() {
    this.mUnityPlayer.setOnSystemUiVisibilityChangeListener(visibility -> RadarOverviewActivity.this.showSystemUi());
}

在某些情况下,图形区域上方会出现一个类似大小的黑条。

最后,当黑条出现时,本机 UI 也会中断。对于底部栏,应该有一些工具可以在图形实际开始的地方向上推。底部的黑条是 UnityPlayer 的一部分,因为触摸那里实际上会导致与图形的交互。顶栏,当它在那里时,就更奇怪了。该区域实际上是本机工具栏应该在的地方,并且在某种程度上是。看不到,但触摸那里会触发 UI 事件!!!看起来 Unity 视图在非全屏时无法正确放置,因为 Native UI 最初显示正确,但当 Unity 启动时变得很奇怪。再次指出关注点。这仅发生在高纵横比设备中。16:9 的设备似乎没有问题。

所以主要问题是,我如何将应用程序从全屏中取出,同时显示状态栏而不破坏 Unity 渲染的高方面?

4

1 回答 1

0

我不是 100% 确定原因,但似乎其他人遇到了这个问题,特别是 Android 9。更新到 Unity 2019.1.5f1 实际上为我解决了这个问题。

我正在为可能需要它但尚未接受它的其他人发布此答案。我想首先确定问题点是什么。我会相应地更新。

于 2019-06-05T01:20:12.533 回答