#はじめに
どうもnisokaです。
前回に引き続き、オンライン開発の初心者がオンラインゲームを作る過程をお届けします。
対象読者さんはオンライン開発を始めたばかりの方ですので、かなり初心者向けです。
以前の記事【モノビットエンジンでかんたんサーバ接続】にて、ルーム作成&入室のかんたんな流れとその方法について書きました。
今回はその内容を少しだけ発展させ、入室可能かどうかチェックする処理を作ります。
環境は以下の通りです
win10 64bit, Unity2018.3.3f1, Monobit Unity Networking2.0 v2.6
#やること
- 入室可能なルームが存在するかチェックする
- 存在していたらランダム入室する
- 存在していなかったら新しく部屋を作る
#実装方法
ルーム入室前のロビー入室が完了したタイミングでチェックを行いたいので、
下記のコールバックに処理を書きます。
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のもっと詳しい使い方などが載っていますので、気になった方は是非そちらもご覧ください。
#参考リンク