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-Fi2
: 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プロジェクトに導入してみてください!