本日はUnity調査枠です。
個人的な興味でマルチデバイスでの通信を学んでいます。UnityではPhotonを使用することで簡単にマルチユーザーやマルチデバイスを実装できますが今回はPhotonを使用しない方法で通信を実現します。
〇Websocketとは?
WebsocketはWebでの双方向通信を行う仕組みを指すようです。
Photonに比べサーバーを建てる必要がありますが、Webや他のデバイスなどとの通信もできるようです。筆者は今回初めて触っていきます。
〇導入ーUnityで通信
①GitHubから[websocket-sharp]を入手します。
②ダウンロードし展開した[]をUnityで使用するためには一度VisualStudioを使用してビルドを行う必要があります。[websocket-sharp.sln]を開きます。
③ダイアログが表示された場合[OK]を選択します。
④[ソリューションエクスプローラー]から[Example]を削除します。
⑤[Debug]→[Release]へ切り替え[ソリューションのビルド]を実行します。
⑥websocket-sharp-master/websocket-sharp/bin/Releaseに[websocket-sharp.dll]が生成されていた場合成功になります。
⑦[websocket-sharp.dll]をUnityのProjectウィンドウにインポートします。ここではPluginというファイルを作成して配置しています。
以上でWebsocketの導入が完了しました。
次にUnityの実装を行います。
〇スクリプト
今回は参考として挙げたサイトさんのコードを変数だけ変えてそのまま使用しています。
using UnityEngine; using System.Collections; using WebSocketSharp; public class ClientExample : MonoBehaviour { private WebSocket _webSocket; private const string WEBSOCKET_URL = "ws://(PCのIPアドレス):8080"; private void Start() { _webSocket = new WebSocket(WEBSOCKET_URL); Debug.Log(_webSocket); _webSocket.OnMessage += (sender, e) => Debug.Log(e.Data); _webSocket.OnClose += (sender, e) => Debug.Log("Close"); _webSocket.Connect(); } private void Update() { if(Input.GetKeyDown(KeyCode.S)) _webSocket.Send("Send a message"); } private void OnDestroy() { _webSocket.Close(); _webSocket = null; } }
WEBSOCKET_URLはIPアドレスを入力します。またポートに関しては筆者環境では3000が使用できなかったため8080を使用しています。
次に通信を受け取る側です。こちらも参考にさせていただいたサイトさんをほぼ流用しています。
using UnityEngine; using System.Collections; using WebSocketSharp; using WebSocketSharp.Server; public class ServerExample : MonoBehaviour { private WebSocketServer _server; private void Start() { _server = new WebSocketServer(8080); _server.AddWebSocketService<Echo>("/"); _server.Start(); } private void OnDestroy() { _server.Stop(); _server = null; } public class Echo : WebSocketBehavior { protected override void OnMessage(MessageEventArgs e) { Sessions.Broadcast(e.Data); Debug.Log(e.Data); } } }
上記のスクリプトを2つのUnityプロジェクトのシーンに配置します。
2つのUnityプロジェクトを使用する意味は違うアプリ(環境)で通信を行う必要があるためです。
両方のプロジェクトでエディタを実行しSキーを入力することで両方のプロジェクトのconsoleウィンドウにメッセージが表示されます。
以上でローカル環境でですがWebsocketが使用できました。