Android / Unity-全屏模式,Android状态栏和3D高宽比

时间:2019-06-03 06:49:06

标签: android unity3d android-fullscreen android-immersive

一个星期以来,我一直在绞尽脑汁尝试左右的事情,但似乎找不到答案。我可能实际上还有更多问题。

我们有一个应用程序在其活动之一中使用Unity视图来呈现一些图形。由于这是一个普通的应用程序,而不是游戏,因此我们希望删除沉浸式模式和全屏模式,以便我们可以重新获得系统栏(状态和导航)

现在,从Unity的最新版本开始,他们在Android的播放器设置中添加了Start in fullscreen mode选项。问题在于上述选项仅带回导航栏。

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

现在,直到我使用高纵横比(18.5:9-Pixel 3 XL-Android 9)设备之前,它都像魅力一样发挥作用。

如果仅使用Unity全屏选项进行处理,图形可以很好地缩放,但是我没有状态栏,这对于带槽手机更加明显:

enter image description here

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

enter image description here

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

对不起,我无法向您显示实际的应用程序。

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

// 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视图无法正确放置自身,因为本机UI最初正确显示,但是当Unity踢入时,一切都变得很奇怪。再次指出关注点。这仅在高方面的设备中发生。 16:9设备似乎没有问题。

所以主要问题是,如何在状态栏出现且不破坏Unity渲染高处的情况下,将应用从全屏模式中移除?

1 个答案:

答案 0 :(得分:0)

我不是100%知道为什么,但是其他人似乎有这个问题,尤其是Android9。更新到Unity 2019.1.5f1实际上为我解决了这个问题。

我正在将这个答案发布给其他可能需要但尚未接受的人。我首先要确保问题出在哪里。我将进行相应的更新。