環境
- 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」という項目にチェックをつける必要がある