LoginSignup
1

More than 3 years have passed since last update.

posted at

WebSocketはUnityのWebGLエクスポートでどれぐらいのリアルタイム性を発揮できるか、検証してみた

https://test-rails-demo.herokuapp.com/
上記サイトにあるプラウザ上にあるユニティちゃんを、スマホで操作できるかを試してみよう。
上記demoの動画をgifとしてアップしました。
websocketdemo_part01.gif

興味のある方はこちらのyoutube動画もご覧ください。
IMAGE ALT TEXT HERE

前提

前提として、Rails5からActionCableというWebsocketを使いやすくするframeworkが登場しましたが、
このframeworkは普通のWEB用で、クライアント側(ブラウザ側)からの送信処理、サーバからの受信処理は全てJavaScriptで書いてあります。
そこで、サーバ側はActionCableのままで(Railsのままで)、クライアント側をクロスプラットフォームにすれば、それはどれほど素晴らしいことか……

準備作業

車輪の再発明にならないように、Google先生に聞いてみました。
「actioncable unity」で検索……と、出てきたは記事の中の送受信処理はJavaScriptのままになっています。
で、Unityのアセットストアも検索して、「Simple Web Sockets for Unity WebGL」はちょうど需要に合致しました。
Downloadし、解凍すると、
・WebSocket.cs
・websocket-sharp.dll
・WebSocket.jslib
の三つのファイルが出てくるはず。この文章を書いている時点では、「Simple Web Sockets for Unity WebGL」既にUnityアセットストアから削除されたらしく、でも問題ありません。
https://github.com/sta/websocket-sharp
からダウンロードしたzipファイルを解凍し、中の「websocket-sharp」フォルダをそのままUnityのAssets\Pluginsにコピーすればいいです。
image.png

ActionCableのwrapperの作成(C#(unity版))

とりあえず動く(Chrome Ver 72.0.3626.121とAndroid8.1.0)ようになりました。コア部分のソースは
https://github.com/chooaya/ActionCableUnityCSharp
にコミットしました。どこがボトルネックかを究明し、修正したらまたコミットしなおします。

アップしたYoutube動画の説明

赤い線で囲んだ3Dキャラを下のコントローラーで操作できるかのデモ。

image.png
3Dキャラ側はゲーム画面起動と同時にwebsocketサーバに接続(Subscribe)し、3Dキャラをユニークのキーとして、サーバに登録します。

コントローラーはapkファイルとしてスマホにインストールされ、起動すると、websocketサーバに接続(Subscribe)します。websocketサーバがこれを検知したら、今サーバに接続している全てのユーザーをbroadcastします。

コントローラー側は受信したユーザーに対して、コマンド(上下左右の移動、ジャンプなど)を発行し、それがまたwebsocketサーバ経由で3Dキャラに到着します。

問題点

コマンドを発行してから1秒(場合によってはそれ以上)も経ったのに、キャラはまだ動きません。

課題

1,コマンド発行→サーバ受信→ターゲットクライアント受信の間の経過時間を算出
2,UnityのWebGLエクスポート側はwebassemblyとjavascriptとの間に通信があり、それがボトルネックになっているかを検証

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
What you can do with signing up
1