Android/Unity - 全屏模式、Android 的状态栏和 3D 纵横比

标签 android unity-game-engine android-fullscreen android-immersive

一周以来,我一直在绞尽脑汁地尝试各种事情,但我似乎找不到答案。我实际上可能有更多问题。

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

自从最新版本的 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());
}

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

最后,当出现黑条时, native UI 也会中断。对于底部栏,应该有一些工具被推到图形实际开始的地方。底部的黑条是 UnityPlayer 的一部分,因为触摸那里实际上会引起与图形的交互。顶部栏,当它在那里时,甚至更奇怪。该区域实际上是 native 工具栏应该在的地方,并且在某种程度上是这样。它看不见,但触摸那里会触发 UI 事件!!!看起来 Unity View 在非全屏时无法正确放置自己,因为 Native UI 最初显示正确但当 Unity 启动时一切都很奇怪。再次强调一下。这仅发生在高纵横比设备中。 16:9 设备似乎没有问题。

所以主要问题是,如何让应用程序退出全屏模式,同时出现状态栏并且不破坏 Unity 在高方面的渲染?

最佳答案

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

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

关于Android/Unity - 全屏模式、Android 的状态栏和 3D 纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422311/

相关文章:

android - 不同物体的不同纹理

javascript - 导出到 WebGL 以用于 React Native

unity-game-engine - 卸载unity开发的app后PlayerPrefs还存在吗?

Android - VideoView - 全屏时 View 消失

android - 条码 fragment (Zxing库)

android - 如何在 DatePickerDialog.OnDateSetListener 中获取 OnClick?

c# - 停止其他脚本中的协程

azure - Visual Studio Team Services 从本地构建代理设置内部版本号

java - Android 应用程序仅占用屏幕的一部分

android - 从全屏切换到非全屏弹出/幻灯片