UnityのLANのマッチング
Packageフォルダにあるパッケージでは、「ルームを立てる」「ルームを探す」の二種類の機能があります。
ルームへの接続後については、全くケアしていません
(サンプルではMLAPIでプレイヤー名の同期などを行っています)
Broadcastアドレス(255.255.255.255)に対して、UDPパケットでルーム情報を流すことでLAN内でのマッチングを実現しています。
動作するプラットフォーム:Windows/Mac/Androidで動作します。
iOSはBraodcastパケットを流すために plistへの追加が必要です。
WebGLは動作しません。
シーン上にPackage内にあるLANRoomManager.prefabを配置してください。
Inspector上でいくつかの項目が設定できます
■UdpPacketPort
Broadcast(255.255.255.255)へルーム情報を流す時のポート番号を指定します
■BroadCastSpanMs
何ミリ秒ごとに情報を流すか設定します。
■TimeoutMs
何ミリ秒の間データを受信しなかったらタイムアウトとみなすか、設定します。
byte limitUser = 16; // <- 最大参加人数
int serverPort = 8888; // <- 実際のサーバー接続時に待っているポート番号
var roomInfo = new RoomInfo( "初心者歓迎ルーム", serverPort , limitUser);
// Hostルームの設定をします
LANRoomManager.Instance.hostRoomInfo = roomInfo;
// 募集を開始します
LANRoomManager.Instance.StartHostThread();
その後適宜ルームの参加人数を下記のような呼び出しで更新してください
// コールバックの指定
LANRoomManager.Instance.OnFindNewRoom = (hostRoomInfo)=>{
Debug.Log("新規ルームが見つかりました:"+hostRoomInfo.ToString());
};
LANRoomManager.Instance.OnChangeRoom = = (hostRoomInfo)=>{
Debug.Log("情報が変更されました:"+hostRoomInfo.ToString());
};
LANRoomManager.Instance.OnLoseRoom = = (hostRoomInfo)=>{
Debug.Log("ルームが閉じました:"+hostRoomInfo.ToString());
};
// ルーム検索を開始します
LANRoomManager.Instance.StartClientThread();
LANRoomManager.Instance.OnFindNewRoom = null;
LANRoomManager.Instance.OnChangeRoom = null;
LANRoomManager.Instance.OnLoseRoom = null;
LANRoomManager.Instance.Stop();
・仮想マシンなどがセットアップされた環境では、ルームを立てた際にその情報がLANではなく 仮想ネットワーク環境に流れてしまうことがあります
・1つのマシンで複数のルームを立てることは出来ません。(MLAPIのホストPortが専有されるためです)
・1つのマシンでは、複数の実行ファイルで「ルームを探す」が同時に行えません。実行中の「ルームを探す」のタスクが完了すると、別の実行ファイルで処理されます
サンプルでは、下記のようにキャラクターの位置が同期するデモになっています
ルームが見つかったら接続はMLAPIで行っています。
サンプルプロジェクトの解説等については、別途ドキュメントにしました
こちらのドキュメントをご参照ください