Hatena::ブログ(Diary)

cstech

ソフトウェアのダウンロードはサイドバーのカテゴリ->配布 から一覧を見ることができます。
・FstFileEditorの現在の最新Verは2.01です。記事はこちらからどうぞ
・エロ画像収集ツールは現在配布停止中(形としては)です。
・MikuMikuSoineのダウンロードは停止しております。申し訳ありません。

2014-07-11

Unity製Androidアプリケーションでソケット通信を実現する話(AndroidPro不使用 要25ドル)

| 10:38

ここらへんの話はぐぐっても良い結果が日本語でヒットしなかったので最近やってたこととしてメモしておきます。
ソケット通信ができるとこんなことができるようになります。


環境:
OS:Windows7 64bit Professional
Unity:Unity Pro4.3.4f1(Free版でもできることを確認しました。) AndroidProライセンスは持ってないです。
Android:Xperia Z1 SO-01F docomo Android4.2.2



Unity製Androidアプリケーションでソケット通信をするプログラムを書いた際の問題点として「ソケット通信はAndroidProライセンスを持っていないとできない」ということが挙げられます。
参照:http://japan.unity3d.com/unity/licenses のAndroidの項目
f:id:CST_negi:20140711095658p:image

普通にSystem.Net.Socketsライブラリを使ったコードをAndroidビルドしても動きません。
というかビルド最中に
Error building Player: SystemException: 'System.Net.Sockets' are supported only with Unity Android Pro. 」というエラーで怒られると思います。

ではどうしたら良いかというと金の力が発揮されてきます。
「Unity Android UDP」あたりでぐぐるとUnityAnswersの方にいくつか解決法が提示されているのですが、サーバを介してやる方法だったりAndroidProライセンス大人しく買えやみたいな話だったりJavaのコード呼び出してどうにかする話だったり物騒な話が多いです。



その中で一番簡単な方法としてGood'ol Socketsというアセットを使う方法を今回記事にしようと思います。
Good'ol Socktetsとは:
要はUnityFreeバージョン(もちろんAndroidProもいらない)でソケット通信が使えるようになりますよってやつです。
Good'ol Socketsの詳細はこちら

このアセットはSystem.Net.Socketsの中身を全部LostPolygon.System.Net.Socktetsライブラリで実現しています。
また名前空間が違いだけでクラス名(UdpClientとかTcpListenerなど)が一緒なので今まで書いていたコードの"System.Net.Socktets"を"LostPolygon.System.Net.Socktets"に変更するだけでUnityFreeでもソケット通信ができるようになるというすぐれものです。


ほんとにこれだけなので書くことがもうないんですけど、まとめますと
・Good'Ol Socketsをプロジェクトにインポート
・メニューバーに追加されるパッチを当てる(下の画像参照)
f:id:CST_negi:20140711101920p:image
これでコードの問題は解決しました。これで使えるようになります。


と言いたいところなんですが、実はこれだけでは何故かできませんで…
それで勘でメニューバーのFile→Build Settings...→PlayerSettingsのAndroidの項目からInternetAccessをAutoからRequireにしたら動作するようになりました。
f:id:CST_negi:20140711103024p:image:w360

これがたぶん一番早いと思います。



小ネタというか、不具合?
自分に限った話かもしれませんが、InternetAccessをAutoRequireにするとUnity Remoteが動作しなくなります。
(※Unity RemoteというのはUnityプロジェクトでiOS(Android)デバイスをリモコンとして使用出来るアプリケーションです。詳しくは【超便利】Unityでモバイル開発〜Unity Remote〜
こちらのブログにわかりやすく書かれているので参照してください。)

なお、InternetAccessをAutoにするとUnity Remoteは再度動くようになります。

以上です。

おばQおばQ 2014/11/26 20:06 フリーだと使えないかもしれないです。何度か試しているのですがパッチ当てる際に「UnauthorizedAccessException」エラーが出ます

CST_negiCST_negi 2014/12/02 00:48 おばQ様
コメントありがとうございます。
ただFree版でもできたという報告がありましたので、これが原因ではないかもです。

エラー内容的にファイルアクセスができないといったものだと思いますのでソースファイル自体に問題があるのかも。
パッチをあてなくても手動でusing句の部分を書き換えれば同じことはできますので試してみてください。