[Unity] ネットワークの接続状態を取得する

ネットワーク通信を行うゲームにて、ネットワーク接続状態を調べる方法の紹介です。

iPhoneやAndroid端末など電波状況によって圏外になったり、ユーザから機内モードに設定されたりする可能性があります。
ここでネットワークの接続状態をチェックしておけば状態に応じた処理が可能です。

接続状態はApplication.internetReachabilityから取得できます。

値は以下の通り。

NotReachable
 ネットワークには到達不可
ReachableViaCarrierDataNetwork
 キャリアデータネットワーク経由で到達可能
ReachableViaLocalAreaNetwork
 Wifiまたはケーブル経由で到達可能

実際の使い方は以下のようになります。

using UnityEngine;
using System.Collections;

public class NetworkChecker : MonoBehaviour {
    void Update() {
        if ( !Input.GetMouseButtonDown(0) ) {
            return;
        }

        // ネットワークの状態を出力
        switch ( Application.internetReachability ) {
        case NetworkReachability.NotReachable:
            Debug.Log("ネットワークには到達不可");
            break;
        case NetworkReachability.ReachableViaCarrierDataNetwork:
            Debug.Log("キャリアデータネットワーク経由で到達可能");
            break;
        case NetworkReachability.ReachableViaLocalAreaNetwork:
            Debug.Log("Wifiまたはケーブル経由で到達可能");
            break;
        }
    }
}

マウスの左ボタンが押下されるたびにネットワークの接続状態をコンソールに出力するスクリプトです。

スマートフォンの場合、キャリアかWifiのどちらで接続されているかが分かるため、巨大なデータをダウンロードするときにキャリア接続なら警告メッセージを表示するといった使い方が可能です。