LoginSignup
6
2

More than 3 years have passed since last update.

Unityでステータスバーとナビゲーションバーを表示する

Last updated at Posted at 2020-09-27

環境

  • Unity 2019.4.1f1
  • AQUOS sense3

UIのPanelとTextを張り付けただけのシーン。Textは-90度回転させており、「a~z」と「0~1」までの文字を並べてビューの上から下まで表示。コンテンツがどのような影響を受けるか確認した。(ナビゲーションバーの調査から、位置を左に変更しているが気にしないでください)

ステータスバーを表示する

参考記事:UnityでAndroidのステータスバーを表示するコードのAndorid10対応版

  • コンテンツに重なるようにステータスバーが表示される
  • ステータスバーは透明
  • ナビゲーションバーは表示されておらず、下からスワイプすると表示される(この画像で表示されているのは、スクリーンショットを撮ったときに自動表示されたため)

ナビゲーションバーを表示する

実行開始時に次のようなスクリプトを実行する。上記のステータスバー表示も同時にスクリプトに組み込んでいる。

void Start()
{
    // ナビゲーションバー表示
    Screen.fullScreen = false;
    // ステータスバー表示
    StatusBarController.Show();
}
  • この方法だと、ステータスバーが半透明にならない
  • 上部のコンテンツが見切れている(ステータスバーの高さ分、コンテンツが上にずれた感じ?)

  • ステータスバーを表示するロジックを外すとステータスバーが表示されなくなる

ナビゲーションバーを表示させたまま、ステータスバーを半透明

参考記事:【Unity】Unity 5.3以降でAndroidのStatus Barを表示する方法
ステータスバー表示のロジック(最初の記事にあったもの)を次のように変更

    public static int FLAG_FORCE_NOT_FULLSCREEN = 2048;
    public static int FLAG_LAYOUT_IN_SCREEN = 256;
    private static int WINDOW_FLAG_TRANSLUCENT_STATUS = 0x04000000;

    public static void Show()
    {
#if !UNITY_EDITOR && UNITY_ANDROID
        //ChangeFlags(FLAG_FULLSCREEN,FLAG_FORCE_NOT_FULLSCREEN);
        ChangeFlags(FLAG_FULLSCREEN,FLAG_FORCE_NOT_FULLSCREEN | FLAG_LAYOUT_IN_SCREEN | WINDOW_FLAG_TRANSLUCENT_STATUS);
#endif
    }

ナビゲーションバーを表示させたまま、ステータスバーを透明にする

  • 参考:setStatusBarColor
  • 上記の半透明のやり方(WINDOW_FLAG_TRANSLUCENT_STATUS)ではなく、setStatusBarColor関数を利用すると、透明や色をつけられる
  • WINDOW_FLAG_TRANSLUCENT_STATUSと一緒に使えないので、ステータスバーの処理は元に戻す
   public static void Show()
    {
#if !UNITY_EDITOR && UNITY_ANDROID
        ChangeFlags(FLAG_FULLSCREEN,FLAG_FORCE_NOT_FULLSCREEN);
#endif
    }
  • setStatusBarColorを利用する
  • COLOR値は、透明度(00~FF)、赤(00~FF)、緑(00~FF)、青(00~FF)だと思われる
  • 以下は完全透明
    private const uint DEFAULT_BACKGROUND_COLOR = 0x00000000;

    private static void RunOnUiThread()
    {
        using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            using (var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                using (var window = activity.Call<AndroidJavaObject>("getWindow"))
                {
                    window.Call("clearFlags", clearStatusBarFlag);
                    window.Call("addFlags", addStatusBarFlag);
                    window.Call("setStatusBarColor", unchecked((int)_statusBarColor));
                }
            }
        }
    }

  • ちなみに0xFF000000にしたところ、黒でステータスバーが表示された

ノッチ付きAndroid端末

ノッチのついたAndroid端末では、 Player Settings の Resolution and Presentation にある「Render outside safe area」という項目にチェックをつける必要がある

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2