Tips

UnityでPUNを使ったオンラインマルチプレイの実装 -カスタムプロパティ編-

UnityでPUNを使ったオンラインマルチプレイの実装 -カスタムプロパティ編-

UnityでPUNを使ったオンラインマルチプレイの実装 -カスタムプロパティ編-


UnityのネットワークエンジンサービスであるPUN(Photon Unity Networking)について解説していくシリーズ記事です。

<前回までのシリーズ記事一覧>
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -準備編-
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -同期編-
⇒ UnityでPUNを使ったオンラインマルチプレイの実装 -ルームオプション編-

今回はシリーズ4回目、カスタムプロパティ編です。
ルームオプションの一部であるカスタムプロパティを使用して、ルームに任意のオプションを設定する方法を紹介します。
合わせて、ルーム内からのルーム設定の確認 & 変更 についても紹介します。

PUNはバージョン1.73を使用しています。
[Unity_317×90]

カスタムプロパティの設定


1.カスタムプロパティの作成

カスタムプロパティはルームオプションの一部として設定します。
前回は使用しませんでしたが、RoomOptionsクラスには、CustomRoomProperties という項目が存在します。
この CustomRoomProperties で任意のルームオプションを設定できます。

手順としてはまず、カスタムプロパティを先に作成します。
そして CustomRoomProperties に作成したカスタムプロパティを代入します。
これだけです。

実際のサンプルで確認してみましょう。

■通常のルームオプションと、カスタムプロパティの両方を設定したルームを作成するサンプルスクリプトです。
※OnJoindLobby()ってなに?という方はこちらで確認してください。

	// ロビーに入ると呼ばれる
	void OnJoinedLobby() {

		/* まずは通常のルームオプションを作成 */
		RoomOptions roomOptions = new RoomOptions();
		roomOptions.MaxPlayers = 4;
		roomOptions.IsOpen = true;
		roomOptions.IsVisible = true;

		/* ↑ ここまでは前回の内容と一緒 ↑ */

		/* ↓ ここからがカスタムプロパティの設定 ↓ */

		// 名前空間(ExitGames.Client.Photon)内のHashtableクラスのインスタンスを生成して
		ExitGames.Client.Photon.Hashtable roomHash = new ExitGames.Client.Photon.Hashtable();

		// 設定したいカスタムプロパティを、キーと値のセットでAdd
		roomHash.Add("Time", 0);
		roomHash.Add("MapCode", 1);
		roomHash.Add("Mode", "Easy");

		// ルームオプションにハッシュをセット
		roomOptions.CustomRoomProperties = roomHash;

		/* ↑ ここまででカスタムプロパティの設定は終了 ↑ */

		/* ↓ 前回同様ルーム作成時にルームオプションを渡して完了 ↓ */
		PhotonNetwork.CreateRoom(roomName, roomOptions, null);
	}

Hashtableクラスは、名前空間 ExitGames.Client.Photon 内で宣言されたものを使用している点に注意です。
名前空間を省略してしまうと、System.Collections 内の Hashtableクラスが使用されてしまうため、代入でエラーになります。

2.ルーム内からの設定確認

PhotonNetwork.room.XXX で現在入室しているルームのプロパティにアクセスできます。

	void OnJoinedRoom() {
		Debug.Log("ルームへ入室しました。");

		Debug.Log(PhotonNetwork.room.name);				// ルーム名
		Debug.Log(PhotonNetwork.room.playerCount);		// 現在人数
		Debug.Log(PhotonNetwork.room.maxPlayers);		// 最大人数
		Debug.Log(PhotonNetwork.room.open);				// 開放フラグ
		Debug.Log(PhotonNetwork.room.visible);			// 可視フラグ
		Debug.Log(PhotonNetwork.room.customProperties);	// カスタムプロパティ
	}

3.ルーム内からの設定変更

値を代入すれば設定を上書きできます。カスタムプロパティは上書きではなく追加なので注意。

	if (PhotonNetwork.inRoom) {
		PhotonNetwork.room.name = "newRoomName";    // ルーム名変更
		PhotonNetwork.room.maxPlayers = 10;         // 最大人数を変更
		PhotonNetwork.room.open = false;            // 部屋を閉じる
		PhotonNetwork.room.visible = false;         // ロビーから見えなくする

		// カスタムプロパティの追加
		ExitGames.Client.Photon.Hashtable roomHash = new ExitGames.Client.Photon.Hashtable();
		roomHash.Add("hoge", "ほげ");
		PhotonNetwork.room.SetCustomProperties(roomHash);
	}

カスタムプロパティ編は以上です。

次回は、PunRPC編 です。

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search