Unity×iOS

【Unity×iOS】インターネット接続状況(Wi-Fi / 4G / 圏外)を取得する方法|Reachabilityで簡単チェック

UnityでiOSアプリを開発していると、「今ネットに繋がっているか?」「Wi-Fiかモバイル通信か?」「圏外なのか?」といった接続状況を取得したい場面がよくあります。
しかし、Unityには標準で通信状態やネットワーク種別を取得する仕組みはありません
この記事では、iOS標準のReachabilityクラスを利用して、UnityからWi-Fi / 4G / 圏外を正確に判定する方法を、ネイティブプラグイン+コピペOKで解説します!

この記事で分かること

  • Unityでは通信状態を正確に取得できない理由
  • iOSのReachabilityを使ったネットワーク種別の判定方法
  • 【コピペOK】Objective-C++プラグイン+Unity C#コード
  • 通信種別に応じたUI切り替え・機能制限のアイデア

Unity標準APIではネットワーク状態を詳細に取得できない

UnityにはApplication.internetReachabilityという簡易APIがありますが、

  • モバイル/Wi-Fiの判定精度が低い
  • 圏外(通信不能)との違いを明確に扱えない
  • モバイルネットワークの種類(4G/5Gなど)は取得不可

そのため、より正確な情報が必要な場合はiOSネイティブAPI(Reachability)を使う必要があります。

Reachabilityとは?

Appleが公開しているObjective-Cベースのサンプルクラスで、

  • 現在のインターネット接続可否
  • 接続中ならWi-Fiかモバイルか
    を簡単にチェックできるユーティリティです。

これをUnityのiOSネイティブプラグインとして組み込めば、Unity側から詳細なネットワーク情報を取得可能になります。

【コピペOK】通信状態取得プラグインの作り方

Reachability.h / Reachability.m を導入

まず、以下のApple公式のサンプルコードをXcodeプロジェクト内に追加:

→ Assets/Plugins/iOS/ フォルダに追加し、ビルド対象に含めてください。

.mmファイルを作成する

Assets/Plugins/iOS/NetworkStatusPlugin.mm を作成:

  • 0: Not Reachable(圏外)
  • 1: Reachable via Wi-Fi
  • 2: Reachable via WWAN(モバイル通信)
#import "Reachability.h"

extern "C" int GetNetworkStatus()
{
    Reachability *reach = [Reachability reachabilityForInternetConnection];
    NetworkStatus status = [reach currentReachabilityStatus];
    return (int)status;
}

Unity C# 側の連携スクリプト

using System.Runtime.InteropServices;
using UnityEngine;

public static class NetworkStatusPlugin
{
#if UNITY_IOS && !UNITY_EDITOR
    [DllImport("__Internal")]
    private static extern int GetNetworkStatus();
#else
    private static int GetNetworkStatus() => 1;
#endif

    public enum NetworkType
    {
        NoConnection = 0,
        WiFi = 1,
        Cellular = 2
    }

    public static NetworkType CurrentNetwork => (NetworkType)GetNetworkStatus();
}

使用例:ネットワーク状態に応じたUI表示

using UnityEngine;
using UnityEngine.UI;

public class NetworkDisplay : MonoBehaviour
{
    public Text statusText;

    void Start()
    {
        var net = NetworkStatusPlugin.CurrentNetwork;
        statusText.text = $"接続状態: {net}";
    }
}

活用アイデア

  • 通信状態に応じて機能制限(動画再生や同期処理のON/OFF)
  • モバイル通信時に自動的に軽量モードをON
  • 圏外時に保存型UIへ切り替え・再試行案内を表示

注意点・補足

  • モバイル通信が4Gか5Gかなどの詳細な判定は別手段が必要
  • Reachabilityは通信可能性を示すもので、実際の通信速度とは別
  • Android対応は別実装が必要(本記事はiOS特化)

まとめ

項目内容
Unity標準ではネットワーク判定に限界あり
ReachabilityでiOS側の正確な通信状態を取得可能
Wi-Fi / モバイル / 圏外を識別可能
ネットワーク対応UIや自動切り替えに活用できる

通信状況に応じたやさしいUX・無駄のないアプリ挙動を実現するため、
ぜひ今回の方法をUnity×iOSプロジェクトに導入してみてください!