ルーム内のプレイヤー一覧を表示する 2223242526272829// ルーム内のプレイヤー一覧の表示
GUILayout.BeginHorizontal();
GUILayout.Label(
"PlayerList : "
);
foreach
(MonobitPlayer player
in
MonobitNetwork.playerList)
{
GUILayout.Label(player.name +
" "
);
}
GUILayout.EndHorizontal();
MonobitNetwork.playerList は、現在入室しているルーム内に存在するプレイヤーについて、その一覧を配列情報で格納されています。
チャット発言文を保持する変数を宣言する 111213/** チャット発言文. */
private
string
chatWord =
""
;
GUIを使って入力するチャット発言文を保持する、string 型の変数を用意します。
チャットGUIを作成する 343536373839// チャット発言文の入力
GUILayout.BeginHorizontal();
GUILayout.Label(
"Message : "
);
chatWord = GUILayout.TextField(chatWord, GUILayout.Width(400));
GUILayout.EndHorizontal();
前述までと同様、Unityで通常用いる GUILayout を使ってチャット発言文の入力処理を行ないます。
チャット発言文を送信する 404142434445464748// チャット発言文を送信する
if
(GUILayout.Button(
"Send"
, GUILayout.Width(100)))
{
monobitView.RPC(
"RecvChat"
,
MonobitTargets.All,
MonobitNetwork.playerName,
chatWord);
chatWord =
""
;
}
[Send] ボタンを押したときに、RPCを使ってメッセージを送信します。
List を利用するための using ディレクティブを追加する 2using
System.Collections.Generic;
後述の発言ログ(List<T>)を利用するための using ディレクティブを追加します。
チャット発言ログを保持する変数を宣言する 141516/** チャット発言ログ. */
List<
string
> chatLog =
new
List<
string
>();
GUIを使って入力するチャット発言ログを保持する、List<string> 型の変数を用意します。
チャット発言文を受信し、発言ログに追加する 17181920212223242526272829/**
* RPC 受信関数.
*/
[MunRPC]
void
RecvChat(
string
senderName,
string
senderWord)
{
chatLog.Add(senderName +
" : "
+ senderWord);
if
( chatLog.Count > 10 )
{
chatLog.RemoveAt(0);
}
}
MonobitView.RPC() メソッドを使って送信された情報の受信メソッドを定義します。
今回の場合、MonobitView.RPC() メソッド の第1引数に "RecvChat" を指定していましたので、 メソッド名を RecvChat() として定義します。・メソッド名の接頭に[MunRPC]のアトリビュートを付記すること。 ・MonobitView.RPC() メソッド の第1引数と同じ名前のメソッド名で定義すること。 ・MonobitView.RPC() メソッド の第3引数以降に対応するデータ型の引数値を定義すること。
chatLog の内容を表示する 66676869707172// チャットログを表示する
string
msg =
""
;
for
(
int
i = 0; i < 10; ++i )
{
msg += ((i < chatLog.Count) ? chatLog[i] :
""
) +
"\r\n"
;
}
GUILayout.TextArea(msg);
chatLog を msg にまとめ、GUILayout.TextArea() で表示させます。
ChatScript.cs 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131using
System.Collections;
using
System.Collections.Generic;
using
UnityEngine;
using
MonobitEngine;
public
class
ChatScript : MonobitEngine.MonoBehaviour
{
/** ルーム名. */
private
string
roomName =
""
;
/** チャット発言文. */
private
string
chatWord =
""
;
/** チャット発言ログ. */
List<
string
> chatLog =
new
List<
string
>();
/**
* RPC 受信関数.
*/
[MunRPC]
void
RecvChat(
string
senderName,
string
senderWord)
{
chatLog.Add(senderName +
" : "
+ senderWord);
if
(chatLog.Count > 10)
{
chatLog.RemoveAt(0);
}
}
/**
* GUI制御.
*/
void
OnGUI()
{
// MUNサーバに接続している場合
if
(MonobitNetwork.isConnect)
{
// ルームに入室している場合
if
(MonobitNetwork.inRoom)
{
// ルーム内のプレイヤー一覧の表示
GUILayout.BeginHorizontal();
GUILayout.Label(
"PlayerList : "
);
foreach
(MonobitPlayer player
in
MonobitNetwork.playerList)
{
GUILayout.Label(player.name +
" "
);
}
GUILayout.EndHorizontal();
// チャット発言文の入力
GUILayout.BeginHorizontal();
GUILayout.Label(
"Message : "
);
chatWord = GUILayout.TextField(chatWord, GUILayout.Width(400));
GUILayout.EndHorizontal();
// チャット発言文を送信する
if
(GUILayout.Button(
"Send"
, GUILayout.Width(100)))
{
monobitView.RPC(
"RecvChat"
,
MonobitTargets.All,
MonobitNetwork.playerName,
chatWord);
chatWord =
""
;
}
// チャットログを表示する
string
msg =
""
;
for
(
int
i = 0; i < 10; ++i)
{
msg += ((i < chatLog.Count) ? chatLog[i] :
""
) +
"\r\n"
;
}
GUILayout.TextArea(msg);
}
// ルームに入室していない場合
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"
);
}
}
}
}