チャットルームへの入室制御
目次
概要
ルームへの入室状態を調べる
ルームの作成
ルーム一覧の取得
選択したルームへの入室
ここまでの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");
}
}
}
}