Edited at

【Unity】入室可能なルームが存在するかチェックする方法【モノビットエンジン入門】


はじめに

どうもnisokaです。

前回に引き続き、オンライン開発の初心者がオンラインゲームを作る過程をお届けします。

対象読者さんはオンライン開発を始めたばかりの方ですので、かなり初心者向けです。

以前の記事【モノビットエンジンでかんたんサーバ接続】にて、ルーム作成&入室のかんたんな流れとその方法について書きました。

今回はその内容を少しだけ発展させ、入室可能かどうかチェックする処理を作ります。

環境は以下の通りです

win10 64bit, Unity2018.3.3f1, Monobit Unity Networking2.0 v2.6


やること


  1. 入室可能なルームが存在するかチェックする

  2. 存在していたらランダム入室する

  3. 存在していなかったら新しく部屋を作る


実装方法

ルーム入室前のロビー入室が完了したタイミングでチェックを行いたいので、

下記のコールバックに処理を書きます。


ロビーに入室したときに呼ばれるコールバック

public void OnJoinedLobby()

{
// この中に処理を書く
}


チェックする処理

まず、IsEnableEnterRoom()で入室可能な部屋があるか調べます。

存在していたらMonobitNetwork.JoinRandomRoom()でランダム入室、存在していなかったらCreateRoom()でルームを作成しています。

System.Guid.NewGuid().ToString("N").Substring(0, 10).ToUpper()は10文字以内のランダムな文字列を作成しています。

MAX_ROOM_PLAYERS_COUNTはルームの最大入室人数です。


チェックする処理

if (IsEnableEnterRoom())

{
// 存在したのでランダム入室する
MonobitNetwork.JoinRandomRoom();
}
else
{
// 存在しなかったので部屋を新しく作る
string randomRoomName = System.Guid.NewGuid().ToString("N").Substring(0, 10).ToUpper();
CreateRoom(randomRoomName, MAX_ROOM_PLAYERS_COUNT);
}


入室可能な部屋があるか調べる

MonobitNetwork.GetRoomData()で存在するすべてのルームを取得し、クローズされていたらスルーします。

roomData.playerCount < roomData.maxPlayersは人数を比較し、入れる余地があったらTrueを返します。


入室可能な部屋があるか調べる関数

private bool EnableEnterRoom()

{
foreach (RoomData roomData in MonobitNetwork.GetRoomData())
{
// クローズされている部屋だったら
if(roomData.open == false)
{
// 次を見る
continue;
}

if (roomData.playerCount < roomData.maxPlayers)
{
return true;
}
}

return false;
}



ルームを作成する

MonobitNetwork.CreateRoom()でルーム作成要求をしています。

第2引数のRoomSettingsはルームカスタムパラメータと言って、公開/非公開や、オープン/クローズ、最大人数などを設定できます。


ルームを作成する関数

private bool CreateRoom(string roomName, int maxPlayer)

{
if (string.IsNullOrEmpty(roomName))
return false;

if (maxPlayer <= 0)
return false;

// ルームカスタムパラメータ設定
RoomSettings roomSetings = new RoomSettings()
{
isVisible = true,
isOpen = true,
maxPlayers = (uint)maxPlayer,
roomParameters = null,
lobbyParameters = new string[] { }
};

return MonobitNetwork.CreateRoom(roomName, roomSetings, null);
}



最後に

MUNを使ったルームマッチング機能の全容を書いた記事がまだないので、今後近いうちにお届けしたいと思います。

下記リンクにMUNのもっと詳しい使い方などが載っていますので、気になった方は是非そちらもご覧ください。


参考リンク