LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-07-08

はじめに

どうも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のもっと詳しい使い方などが載っていますので、気になった方は是非そちらもご覧ください。

参考リンク

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