UDPデータを受信できないときは、Windows ファイアウォールの設定とパブリックネットワークへのアクセス許可を疑ってみましょう。
現象
Windows ファイアウォールの設定が適切でないと、 Unity Editorとネイティブプラグイン を使って、そのプラグイン内から UDP(データグラム)ソケットでIoT からデータを待ち受けるときに、 socketの生成結果は正常なのに、recvやrecvfromの呼び出し結果が戻ってこなかったり常に0のままだったりすることがあります。
(大事なところを 太字 にしてみました)
修正手順
-
Unity Editorを終了します。
-
Windows ファイアウォールの設定を開いて確認します。Windows 10ならタスクバーの検索のところに"Firewall"と入力すると簡単に開けるかも知れません。
以降スクショは英語版ですが日本語版でも一緒だと思います。
-
Unity Editorを再起動すると、「Windows セキュリティ重要な警告」ダイアログが出るので、 パブリック ネットワーク(空港、喫茶店など) (非推奨) にもチェックを入れから「アクセスを許可する」ボタンを押します。
そもそも何でこんな事が起きるのか?
IoTへの接続というところが肝になっていて、IoTをアクセスポイントモードにしてWi-Fi等で直接接続する場合、デフォルトゲートウェイがありません。
Windowsはこのような接続をパブリックネットワークと判断するようです。
パブリックネットワークについてはこの辺が詳しいです。
http://www.atmarkit.co.jp/ait/articles/1012/24/news127.html
Unity Editorの起動時には、「Windows セキュリティ重要な警告」ダイアログの「プライベートネットワーク(ホームネットワークや社内ネットワークなど) 」にだけチェックが入っているので、そのまま「アクセスを許可する」ボタンを押していた場合、以降プログラム内からパブリックネットワークからのデータを受信しようとしてもブロックされてしまいます。
まとめ
「セキュリティが強化された Windows ファイアウォール」はマジで強化されてるので要チェック。
IoTからのデータを受信するなら、パブリックネットワークも許可されているか見直そう。
(検索用キーワード: Unity3D, エディタ, bind, ファイアーウォール)