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】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発