質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

Unityでネットのアクセス状況を調べてたい

tosao1974
tosao1974

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0グッド

1クリップ

675閲覧

投稿2019/04/02 02:57

編集2019/04/02 03:29

前提・実現したいこと

Unityでインターネットのアクセス状況を調べて処理を分岐させたいと
思っております。

発生している問題・エラーメッセージ

ネットで調べて「Application.internetReachability」を使用すれば可能
なようですが「Play」状態では機能するのですがビルドでPC用に「.exe」書き出しすると機能しません。
play時はネット回線をオン、オフするとDebugおよびテキストが切り替わるのですがビルドして回線をオフしても常に「Wifiかケーブルで接続」状態です。
「Application.internetReachability」はPC用にビルドすると使えない???などということがあるのでしょうか?

該当のソースコード

if (Application.internetReachability == NetworkReachability.NotReachable){
// ネットワークに接続されていない状態
networkState.text = "ネットワークに未接続だっ! 通信環境をチェック!";
} else {
// ネットワークに接続されている状態
networkState.text = "ネットワークに接続されているよ!";
}

もしくは

switch (Application.internetReachability) {
case NetworkReachability.NotReachable:
Debug.Log("接続されてないよ");
break;
case NetworkReachability.ReachableViaCarrierDataNetwork:
Debug.Log("キャリアネットワークで接続してるよ");
break;
case NetworkReachability.ReachableViaLocalAreaNetwork:
Debug.Log("Wifiかケーブルで接続してるよ");
break;
}

試したこと

Unityのバージョンの問題化と思い
・5.6.4
・2017.3.1
・最新版2018.3
でそれぞれ試してみましたが結果は同じでした。

補足情報(FW/ツールのバージョンなど)

使用環境は
Windows8.1
です。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2019/04/02 03:02

機能しない、とはどういう動作になるんでしょうか
tosao1974

2019/04/02 03:09

play時はネット回線をオン、オフするとDebugおよびテキストが切り替わるのですがビルドして回線をオフしても常に「Wifiかケーブルで接続」状態です。 もしかして「Application.internetReachability」はビルドすると使えない???とかですかね??
y_waiwai

2019/04/02 03:20

質問は編集できますんで、そこら辺のことを追記していただけるとよろしいかと
tosao1974

2019/04/02 03:26

ありがとうございます
stdio

2019/04/02 03:28

スマホではいけそうな感じします。スマホ用に作られているのであれば、Android等でのデバックをおススメ致します。
tosao1974

2019/04/02 03:33

今回PC用のアプリを作っておりまして… ネットの記事でもスマホっぽいことが書かれていたのですが公式サイトには特にそのような内容の注意書きがないので困っております。

回答1

2

ベストアンサー

おそらくPCだと「NetworkReachability.ReachableViaLocalAreaNetwork」が返ってくるかと思います。
internetReachability などと言ってますが、これは実際に接続しているかどうかをきちんと確認しているわけではないそうです。あくまでモバイル端末の接続のための状況(端末側の設定)を見ているだけのようです。

下記の通りドキュメントに記載されています。

Note: Do not use this property to determine the actual connectivity. E.g. the device can be connected to a hot spot, but not have the actual route to the network. Non-handhelds are considered to always be capable of NetworkReachability.ReachableViaLocalAreaNetwork.

実際の接続性の確認のためこのプロパティを利用しないでください。
非モバイル機器の場合は常にNetworkReachability.ReachableViaLocalAreaNetworkが返ってきます。

Unityドキュメント: Application.internetReachability

別のアプローチとしてバックグラウンドでURLにアクセスさせてその結果から接続状況を得るという方法ができるそうです。マニュアルだけ見て書いたのでお好みの動作をするかはわかりませんが、とりあえず裏でhttp://google.comにリクエストを出してその結果をチェックする感じのようです。

cs

1 IEnumerator CheckInternetAccess() { 2 UnityWebRequest request = new UnityWebRequest("http://google.com"); 3 4 yield return request.SendWebRequest(); 5 6 if (request.isNetworkError) { 7 Debug.Log(request.error); 8 } else { 9 Debug.Log("Access Done"); 10 } 11 }

投稿2019/04/02 04:26

hogefugapiyo

総合スコア3222

tosao1974, rarafy👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

tosao1974

2019/04/02 09:40

ご回答いただきましてありがとうございます。 やはりモバイル端末でしか対応していないんですね。。。 ご回答いただきました別アプローチの方法でトライしてみましたところイメージ通りの動作を確認することができました! 大変感謝いたします。 ただ当方のUnity環境が5.6.4をメインで使用しているため「request.isNetworkError」が対応しておりませんでした。 アプリのUnityバージョンを上げることも視野に入れて検討してみたいと思います。 ありがとうございました!
hogefugapiyo

2019/04/03 01:54 編集

恐らく is.Error とかそのあたりで旧バージョンは対応可能かもしれません。 internetReachabilityに関してはスマホゲームを作る際に「大容量のデータをダウンロードしますがよろしいですか?(WI-FI利用をおすすめします)」みたいな表示を出したい時とかには重宝するプロパティかと思います。
tosao1974

2019/04/03 07:06

ご連絡ありがとうございます! if (request.isError) {}で回避できました! またSendWebRequest();も使用のバージョンで使えなかったので yield return request.Send(); に変更しましたところ無事機能しました。 大変助かりました!感謝申し上げます。
IShix

2019/04/03 07:40 編集

上記でバッチリだと思いますが1点共有します。 UnityWebRequestはGCに依存しないのでDispose()を呼ぶ必要があります。 GCに通知しないと使用したメモリを解放してくれず、いつまでも占有されたままになります。 C#にはusingステートメントというものがあって自動でrequest.Dispose()を呼んでくれる機能があります。例外時でも呼んでくれるのでおすすめです。書き方は下記のような形となります。 using (UnityWebRequest request = new UnityWebRequest("http://google.com")) { yield return request.Send(); if (request.isError) { Debug.Log(request.error); } else { Debug.Log("Access Done"); } }
IShix

2019/04/03 07:56

あと、上記で成功されているのでしたら良いのですが サーバーの通信可否の確認はpingを飛ばしてチェックするのが一般的です。 スマホ向けでは利用できませんがPC向けなら利用できると思います。
tosao1974

2019/04/05 10:38

ご連絡いただきありがとうございます! 当方初心者なためいろいろと勉強になります! 教えていただきました書き方を参考にさせていただきたいと思います。 ありがとうございました。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。