今回はPhotonのロビーとルームについて説明します。
なんとなく言葉から想像はつくかもしれませんが、例えばホテルで宿泊するときの手順を思い浮かべてください。
- ホテルの入り口から入る
- ロビーの受付に行って部屋を選ぶ
- 部屋に入る
という手順になると思いますが、同様にPhotonで作成するオンラインゲームでも
- Photonに接続する
- ロビーに入ってルーム一覧からルームを選ぶ
- ゲームルームに入る
というゲームシステムの構成にすることができます。
ロビー
PhotonのSettingsのAuto-Join LobbyをtrueにしているとPhotonに接続後、自動的にロビーに移動します。
プレイヤーはロビーでルームの一覧を参照し、ルームを作成したり、既存のルームに入室したりすることができます。
ルーム数が膨大となってしまい、ルームの検索が大変になる場合はロビーを複数作ることも可能です。
ルームとは
ルームはプレイヤー同士が共にゲームをプレイする場です。
ルーム内でのみ他のプレイヤーと通信し、空間を共有することができます。
ルーム設定
ルームにはRoomOptionsという作成時または作成後に設定できるルームの性質があります。
以下の5つが主なRoomOptionsで設定可能なルームの性質となります。
bool RoomOptions.IsVisible
ルームがロビーでのGetRoomList()で検索対象となるかを設定することができます。
trueで検索対象となり、falseで検索対象から外れます。
bool RoomOptions.IsOpen
ルームへの入室の可否を設定することができます。
trueで入室可、falseで入室不可となります。
byte RoomOptions.MaxPlayers
ルームの最大入室可能プレイヤー数を設定できます。
int型ではなくbyte型だということに注意してください。
HashTable RoomOptions.CustomRoomProperties
HashTable型のルームのカスタムプロパティです。
ルームのカスタムプロパティとは簡単に言うとルームが所持できるHashTableです。
HashTabelはあるObject型のキーに対してObject型のデータを格納できる特殊な配列ですが、カスタムプロパティでは、あるプレイヤーが設定した情報が同じルームに接続しているプレイヤー全てに同期されます。
string[] RoomOptions.CustomRoomPropertiesForLobby
CustomRoomPropertiesForLobbyにルームのカスタムプロパティのキー値を設定すると、そのカスタムプロパティの値をロビーからも参照できるようになります。
ルーム内の情報をロビーで得るための数少ない手段です。
MasterClient
Photonのルームには必ずMasterClientと呼ばれるプレイヤーが存在します。
ルーム作成時にはルーム作成者がMasterClientとなり、MasterClientがルームから退出するときは同じルームにいる最もPhotonViewIDの番号が小さいプレイヤーが次のMasterClientとなります。
PUNではゲームを管理するために、同ルーム内のプレイヤーからRPCでMasterClientへ情報を同期させ、処理を任せたりすることもできます。
より詳しい情報
TutorialOnlineにて利用しそうなことに関してはざっくりと説明しましたが、より詳しく知りたい方は以下のリンクのQiitaのk0mach1様の記事に書いてありますので、参照してみてください。
また、さらにPUNのルームやロビー間の処理に関してはうら干物書き様が詳しく調べてくださっています。とても参考になるので一度目を通すことをお勧めいたします。
最後に
本記事で説明したことを応用すれば鍵付きのルームを作成したりすることも可能なので是非やってみてください!
もし余裕があれば記事にしたいと思います。