LoginSignup
13
2

More than 5 years have passed since last update.

Unity Editorにネイティブプラグインを入れて、そのプラグイン内からUDPデータを受信出来ないときはWindows ファイアウォールの設定を疑ってみる

Posted at

UDPデータを受信できないときは、Windows ファイアウォールの設定とパブリックネットワークへのアクセス許可を疑ってみましょう。

現象

Windows ファイアウォールの設定が適切でないと、 Unity Editorとネイティブプラグイン を使って、そのプラグイン内から UDP(データグラム)ソケットでIoT からデータを待ち受けるときに、 socketの生成結果は正常なのに、recvやrecvfromの呼び出し結果が戻ってこなかったり常に0のままだったりすることがあります。
(大事なところを 太字 にしてみました)

修正手順

  1. Unity Editorを終了します。

  2. Windows ファイアウォールの設定を開いて確認します。Windows 10ならタスクバーの検索のところに"Firewall"と入力すると簡単に開けるかも知れません。
    以降スクショは英語版ですが日本語版でも一緒だと思います。

image.png

  1. 「受信の規則」からUnity Editor.exeを探して、選択して削除します。
    image.png

  2. Unity Editorを再起動すると、「Windows セキュリティ重要な警告」ダイアログが出るので、 パブリック ネットワーク(空港、喫茶店など) (非推奨) にもチェックを入れから「アクセスを許可する」ボタンを押します。
    image.png

そもそも何でこんな事が起きるのか?

IoTへの接続というところが肝になっていて、IoTをアクセスポイントモードにしてWi-Fi等で直接接続する場合、デフォルトゲートウェイがありません。
Windowsはこのような接続をパブリックネットワークと判断するようです。

パブリックネットワークについてはこの辺が詳しいです。
http://www.atmarkit.co.jp/ait/articles/1012/24/news127.html

Unity Editorの起動時には、「Windows セキュリティ重要な警告」ダイアログの「プライベートネットワーク(ホームネットワークや社内ネットワークなど) 」にだけチェックが入っているので、そのまま「アクセスを許可する」ボタンを押していた場合、以降プログラム内からパブリックネットワークからのデータを受信しようとしてもブロックされてしまいます。

まとめ

「セキュリティが強化された Windows ファイアウォール」はマジで強化されてるので要チェック。
IoTからのデータを受信するなら、パブリックネットワークも許可されているか見直そう。

(検索用キーワード: Unity3D, エディタ, bind, ファイアーウォール)

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2