0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unityでステータスバーの文字色が端末によって変わる問題と、最も安定した解決策(Android/iOS)

0
Posted at

Unityでモバイルアプリを開発していると、ステータスバーの文字色が白になったり黒になったりする問題に遭遇することがあります。特にAndroidでは、開発者の端末では黒文字なのに、テスト端末では白文字に変わるといったケースが頻発します。

自分のアプリ(よみススメ)でも複数端末で挙動がバラつき、実運用で困るレベルだったため、Android・iOS両方で徹底検証して解決しました。本記事では、最終的に最も再現性が高かった方法をまとめます。


なぜステータスバーの文字色が統一されないのか?

Androidの場合

Androidはステータスバーの文字色を背景の明度からOSが自動判断します。

  • 明るい背景 → 黒文字
  • 暗い背景 → 白文字

しかし、この判定基準がメーカー(Samsung / Xiaomi / Oppo 等)ごとに異なるため、Unity単体で色を固定することはほぼ不可能です。

iOSの場合

iOSの preferredStatusBarStyle をUnity側で完全制御できず、

  • Scene背景
  • SafeAreaの色
  • UI構成

これらによって白文字/黒文字が変動します。

Unity標準の設定だけでは、安定した結果が得られません。


Unity標準のままでは“端末依存によるブレ”を避けられない

実際に確認できた現象:

  • Pixel端末では黒文字
  • Samsung端末では白文字
  • iPhoneでは白文字、iPadでは黒文字

このように、端末ごとにばらつきが発生してしまいます。


最も安定する実用的な解決策:ステータスバー下に明るい色のPanelを敷く

Unity側からステータスバーの文字色を強制するのではなく、

OSが黒文字を選択せざるを得ない背景を用意する

というアプローチが最も確実でした。

実装の概要

  1. Canvas最上部にステータスバー領域専用のPanelを置く
  2. SafeAreaを取得して高さを合わせる
  3. Panelの色を明るいグレー(例:#F5F5F5)に固定

背景が十分に明るいため、OSのコントラスト判定が必ず黒文字を選ぶようになります。

結果

Android・iOSともに、複数端末で黒文字が安定しました。


実装例:SafeAreaに合わせてPanelの高さを調整するコード

using UnityEngine;
using UnityEngine.UI;

public class StatusBarFiller : MonoBehaviour
{
    public RectTransform statusBarPanel;

    void Start()
    {
        ApplySafeArea();
    }

    void ApplySafeArea()
    {
        // SafeAreaの取得
        Rect safe = Screen.safeArea;
        Vector2 screenSize = new Vector2(Screen.width, Screen.height);

        // ステータスバーの高さを計算
        float topMargin = screenSize.y - safe.yMax;

        // Panelに適用
        statusBarPanel.sizeDelta = new Vector2(0, topMargin);
    }
}

このコードを使うことで、端末ごとに異なるステータスバー高さを自動で反映できます。


iOSでも安定した黒文字にできる

iOSはUnityの背景が暗いと白文字を選びやすいため、

  • ステータスバー領域だけ明るく塗る

ことで安定しました。

SafeArea + Panel方式はどのiOS端末でも同じ挙動を示し、非常に再現性が高い方法でした。


よくある落とし穴

● AndroidManifestの調整だけでは解決しない

メーカー依存の挙動はManifestでは制御できません。

● Canvas背景が暗いと白文字になる

UI全体を白くしなくても、ステータスバー領域だけ明るくすればOKです。

● SafeAreaを無視するとノッチ端末で崩れる

必ずSafeAreaと組み合わせてPanelの高さを制御しましょう。


まとめ

  • Android/iOSともにステータスバー文字色はOSの自動判定に依存する
  • Unity側から完全に固定することは難しい
  • 背景Panelを敷いて明度を固定するのが最も安定した解決策
  • SafeArea対応と組み合わせることで多数の端末で同じ結果を得られる

UnityでUIを扱う人のほとんどが一度は悩むテーマだと思うので、この記事が参考になれば嬉しいです。


ブログでもUnityや個人開発ネタを発信中です!

開発ノウハウやアプリ制作過程、Unity連携系のハマりポイントなど
より深掘りした内容をブログにまとめています。
https://syunpp.com

公開中のアプリ一覧はこちら!

実際にUnityで開発してリリース済みのアプリ一覧をまとめています。
https://syunpp.com/公開中のアプリ一覧/

YouTubeショートでもゲーム開発の裏側を公開中!

Unityで制作中のゲームの進捗や演出テスト、実装の様子を
ショート動画でタイムラプス形式にまとめて発信しています。
https://www.youtube.com/@syunpp_8413/shorts

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?