Unity

【Unity×iOS】ステータスバーを表示・非表示にする方法

この記事について

UnityでiOSアプリを開発する際、
画面上部のステータスバー(時間・電波・バッテリー表示)非表示にしたい場面があります。

本記事では、ステータスバーの表示・非表示を切り替える3つの方法を紹介します。

この記事で分かること

  • ステータスバーを 常に非表示にする方法(Info.plist設定)
  • Unity起動後に スクリプトから表示/非表示を切り替える方法
  • Objective-C(iOSネイティブ) での制御コード

ステータスバーとは?

ステータスバーとは、iPhoneの画面上部にある「電波・時間・バッテリー」などを表示するバーのことです。

通常のアプリでは表示されていますが、Unityでフルスクリーンのゲームを作る場合は非表示にするのが一般的です。

ステータスバーを表示・非表示にする

ステータスバーを固定する

Info.plistで非表示にする

最も確実な方法は、Info.plistを編集して非表示に固定する方法です。
デフォルトは「Status Bar is initially hidden」がYESになりステータスバーは非表示です。

Unity Editorでの設定方法

Unity Editor側でも設定ができ、以下の場所で設定ができます。

  1. 「メニュー」→「Edit」→「Project Settings」→「Player」
  2. 「Resolution and Presentation」→「Status Bar Hidden」

※ 「Status Bar Style」では「自動」「Light」「Dark」などのスタイル指定も可能です。

    ステータスバーを動的に切り替える

    Objective-Cで「動的に切り替える」

    ゲーム中で「一時的にステータスバーを表示したい」場合は、Objective-Cを用いてiOSネイティブ側から制御できます。

    #import <UIKit/UIKit.h>
    
    extern "C" void SetStatusBarVisible(bool visible)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            [[UIApplication sharedApplication] setStatusBarHidden:!visible withAnimation:UIStatusBarAnimationFade];
        });
    }

    Unity C#から呼び出す方法

    ネイティブ関数をC#から呼び出して制御します。SetStatusBarVisible(false)で表示するようにします。

    using System.Runtime.InteropServices;
    using UnityEngine;
    
    public class StatusBarController : MonoBehaviour
    {
        [DllImport("__Internal")]
        private static extern void SetStatusBarVisible(bool visible);
    
        public static void ShowStatusBar(bool visible)
        {
    #if UNITY_IOS && !UNITY_EDITOR
            SetStatusBarVisible(visible);
    #else
            Debug.Log($"ステータスバー切替: {(visible ? "表示" : "非表示")}");
    #endif
        }
    }

    別クラスからの呼び出し方は以下の通りです。

    // ステータスバーを非表示にする
    StatusBarController.ShowStatusBar(false);
    
    // ステータスバーを表示する
    StatusBarController.ShowStatusBar(true);

    実行してみると、実際に時間、回線、バッテリー残量が出ましたね。

    まとめ

    方法特徴用途
    Info.plist設定一番シンプル・確実常に非表示にしたい場合
    Unity Editor設定GUIで簡単に変更可能プロジェクト全体の固定設定
    Objective-C制御実行中にON/OFF可能シーンごとに切り替えたい場合