unity+websocketを使ってマルチプラットフォームな通信処理

どうも、プログラム担当のwagomuです。

初回ですが、今回はプログラマ向けの記事です。

次回作で非同期通信のゲームを作るため、

unity+websocketでサーバ・クライアント共に

プラットフォームに依存しないコードがかける環境を整えました。

(※websocketなのでリアルタイム通信なゲームも作れるはず。)

そこそこ試行錯誤したので備忘録を残しておきます。

試したプラットフォーム:windows, webplayer, android実機

未検証だけどいけるはずのプラットフォーム:iOS, mac, linux

サーバサイド


linux(centOS)のVPSを借りて、ruby でかいてます。ruby最高!

websocket用のgemは websocket-eventmachine-server を使っています。

データベースは手軽に作りたかったのでMongoDBです。

ほぼJSON形式で保存できるので、直感的にDBを組めます。

小規模なものなら十分だと思う。

クライアントサイド(unity)


・websocketはUniWeb($45)というassetを使ってます。

BestHTTP($65)も試しましたが、後始末をしっかりしないと接続情報が残ったままになり、

次に実行したタイミングでunityがビシーになったりしたのでトラブルが少なかったUniWebの方にしました。

判断材料が少ないので、半分は感です。変なバグでないでくれ~

WebPlayerで動かす場合の注意


WebPlayerの通信部分はFlashを踏襲した仕組みになっていて、

通信前にポリシーファイルを受信しないとサーバの外と通信できません。

Unityだとエディタ上では実行できるので注意が必要です。

詳しくはこちら(ウェブプレイヤーのセキュリティサンドボックス / Security Sandbox of the Webplayer)

要約すると、サーバでポリシーファイルを送信するプログラムを建てる必要があるということで、

こちら(yoshida_eth0さんの日記:2009-12-26)のやり方で簡単にできました。感謝!

スマホで動かす場合の注意


Unityでwebsocketを使う場合、通常.Net Socketを使うのですが、

これをスマホで動かす場合、android PROとiOS PROがそれぞれ必要です。

お値段はそれぞれ19万ほど……。

もっとお安く使える方法がないかと模索していたところ、

友人がGool ol’ Sockets($25)というアセットを教えてくれました。

.Net Socketの機能を古い仕組みで実現したというもの。

これは.Net Socketを古い処理でそれ相応のものに置き換えてくれるという神アセット!

UniWeb, BestHttpにも対応していると明記されているので安心です。

ただ、現状だとGool ol’ Socketを使うとWebPlayerで動かなくなってしまうので、

とりあえずビルド前にスイッチしています。

アセットを入れるといつでも使用・未使用を切り替えられるようになるので手間はご愛嬌レベル。

そんなこんなで……

つながった!

つながったぞーー!!

プラットフォーム依存の処理を書かなくて良い!最高!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です