チャットルームへの入室制御

目次

  概要
  ルームへの入室状態を調べる
  ルームの作成
  ルーム一覧の取得
  選択したルームへの入室
  ここまでのChatScriptの内容


概要

チャットルームの入室機能を作ってみる

  ここではチャットルームへの入室制御について、MUN クライアントの主要機能に触れながら組み込んでみましょう。
  なお、MUNにおけるルームの定義については こちら を御参照ください。


ルームへの入室状態を調べる

ルームに入室しているかどうかを知る

  ChatScript の 16 行目付近から、以下のコードを記述します。
			// ルームに入室している場合
			if ( MonobitNetwork.inRoom )
			{
			}
			// ルームに入室していない場合
			else
			{
			}
  MonobitNetwork.inRoom は、ルームに入室しているかどうかのフラグです。

  この値が true を示している場合、ルームに入室中ということです。
  逆に false を示している場合、ルームに未入室(もしくは退室後)ということです。


ルームの作成

ルーム名を保持する変数を用意する

  ChatScript の 8 行目付近から、以下のコードを記述します。
	/** ルーム名. */
	private string roomName = "";
	
  GUIを使って入力するルーム名を保持する、string型の変数を用意します。

ルーム作成のためのGUIを追加する

  ChatScript の 26 行目付近から、以下のコードを記述します。
				// ルーム名の入力
				GUILayout.BeginHorizontal();
				GUILayout.Label("RoomName : ");
				roomName = GUILayout.TextField(roomName, GUILayout.Width(200));
				GUILayout.EndHorizontal();
				
  前述のプレイヤー名入力同様、Unity で通常用いる GUILayout そのままです。
  説明は割愛します。

ルームを作成して入室する

  ChatScript の 32 行目付近から、以下のコードを記述します。
				// ルームを作成して入室する
				if (GUILayout.Button("Create Room", GUILayout.Width(150)))
				{
					MonobitNetwork.CreateRoom(roomName);
				}
				
  MonobitNetwork.CreateRoom() メソッドが、ルームを作成し、作成に成功した後、自動的に入室するための命令です。
  パラメータには、作成するルームの「ルーム名」を指定します。


ルーム一覧の取得

現在ロビー内に存在するルーム一覧を取得する

  ChatScript の 38 行目付近から、以下のコードを記述します。
				// ルーム一覧を検索
				foreach( RoomData room in MonobitNetwork.GetRoomData())
				{
				}
  MonobitNetwork.GetRoomData() メソッドは、現在入室しているロビー内に存在するルームについて、その一覧を取得する命令です。
  戻り値は RoomData[] 型で、上記の例では foreach() にて配列情報を1つずつ room で取得しています。


選択したルームへの入室

ルーム一覧の中から選択したルームに入室する

  ChatScript の 41 行目付近から、以下のコードを記述します。
                    // ルームパラメータの可視化
                    System.String roomParam =
                        System.String.Format(
                            "{0}({1}/{2})",
                            room.name,
                            room.playerCount,
                            ((room.maxPlayers == 0) ? "-" : room.maxPlayers.ToString())
                        );
                    
                    // ルームを選択して入室する
                    if (GUILayout.Button("Enter Room : " + roomParam))
                    {
                        MonobitNetwork.JoinRoom(room.name);
                    }
  RoomData クラスには、ルーム情報としていくつかのデータが含まれています。
  上記ではその一例として、以下の情報をボタン表示させています。
     ・ RoomData.name - ルーム名
     ・ RoomData.playerCount - 現在入室しているプレイヤー人数
     ・ RoomData.maxPlayers - 入室可能なプレイヤー最大人数(0の場合には無制限)

  また MonobitNetwork.JoinRoom() メソッドは、特定のルームに入室するための命令です。
  パラメータに、そのルームを特定する「ルーム名」を指定します。


ここまでのChatScriptの内容


  改めて触れますが、ここまでのChatScript.cs の内容は以下の通りです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MonobitEngine;

public class ChatScript : MonobitEngine.MonoBehaviour
{
    /** ルーム名. */
    private string roomName = "";

    /**
     * GUI制御.
     */
    void OnGUI()
    {
        // MUNサーバに接続している場合
        if (MonobitNetwork.isConnect)
        {
            // ルームに入室している場合
            if (MonobitNetwork.inRoom)
            {
            }
            // ルームに入室していない場合
            else
            {
                // ルーム名の入力
                GUILayout.BeginHorizontal();
                GUILayout.Label("RoomName : ");
                roomName = GUILayout.TextField(roomName, GUILayout.Width(200));
                GUILayout.EndHorizontal();

                // ルームを作成して入室する
                if (GUILayout.Button("Create Room", GUILayout.Width(150)))
                {
                    MonobitNetwork.CreateRoom(roomName);
                }

                // ルーム一覧を検索
                foreach (RoomData room in MonobitNetwork.GetRoomData())
                {
                    // ルームパラメータの可視化
                    System.String roomParam =
                        System.String.Format(
                            "{0}({1}/{2})",
                            room.name,
                            room.playerCount,
                            ((room.maxPlayers == 0) ? "-" : room.maxPlayers.ToString())
                        );

                    // ルームを選択して入室する
                    if (GUILayout.Button("Enter Room : " + roomParam))
                    {
                        MonobitNetwork.JoinRoom(room.name);
                    }
                }
            }
        }
        // MUNサーバに接続していない場合
        else
        {
            // プレイヤー名の入力
            GUILayout.BeginHorizontal();
            GUILayout.Label("PlayerName : ");
            MonobitNetwork.playerName = GUILayout.TextField(
                (MonobitNetwork.playerName == null) ?
                    "" :
                    MonobitNetwork.playerName, GUILayout.Width(200));
            GUILayout.EndHorizontal();

            // デフォルトロビーへの自動入室を許可する
            MonobitNetwork.autoJoinLobby = true;

            // MUNサーバに接続する
            if (GUILayout.Button("Connect Server", GUILayout.Width(150)))
            {
                MonobitNetwork.ConnectServer("SimpleChat_v1.0");
            }
        }
    }
}