LoginSignup
1
1

More than 5 years have passed since last update.

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

Posted at

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との間に通信があり、それがボトルネックになっているかを検証

1
1
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
1
1