Photon Cloudでインターネット経由の協力・対戦プレイを(接続編)
先日PhotonCloudゲームジャムに参加してきたので、Photonについて記述しようと思う。
Photon Cloudについてのまとめはこちら
Photon Cloudの接続管理は、概ね以下の4ステップによって成り立つらしい。
1.サーバーへの接続
2.部屋の選択(ロビー制御)
3.部屋の接続
4.ゲーム内の情報共有
基本的にデータの同期は部屋に入ってから行う感じらしい。裏を返せばロビーでできる事はほんとうに少ないので、複雑な事をしたい場合はロビールームみたいな物を容易するのも手かもしれない。その辺りどう思います?
■サーバーへの接続
まずは1についてだが、これは非常に簡単で、所為を呼ぶだけ。ただし非同期処理なので、接続完了のイベントを得るか処理が完了するまで待つ必要がある。
サーバー接続
サーバー切断PhotonNetwork.ConnectUsingSettings ("0.1");
PhotonNetwork.Disconnect ();
■部屋の選択
これが成功すると、プレイヤーはロビーへ移動する。
まずはロビーから見える部屋の一覧を取得する。
PhotonNetwork.GetRoomList()
部屋を取得すれば部屋の状況も確認することが出来る。具体的にはroom.customPropertiesハッシュテーブルがロビーから確認する事でロビー内情報を入手する。裏を返せばココ以外の情報はほぼ取得出来ない。
room.customPropertiesをロビーで確認出来るようにするには、CreateRoomの第5引数にハッシュテーブルを設定し、第6引数にロビーから取得できるハッシュキーを設定する必要がある。
下の例はisGamePlayをロビーからも参照できるようにしたもの。
PhotonNetwork.CreateRoom (
null, true, true, 4,
new Hashtable (){{"isGamePlay", false} },
new string[] { "isGamePlay"});
なお、この第5引数でハッシュテーブルを設定しないとcustomPropertiesを使用することが出来ない。もし部屋内で共有したい情報があるならば、ココで設定してしまうのも手。
■部屋の接続
部屋に入室するには、部屋を作成するか部屋へ接続する必要がある。ちなみに部屋を作成した場合、問答無用で部屋に接続したことになる。
部屋を作る
部屋へ接続するPhotonNetwork.CreateRoom();
PhotonNetwork.JoinRoom ("部屋名" );
部屋を作成した場合、部屋を作成したプレイヤーがマスタークライアント(MC)となる。大体の場合、MCが処理を統括するのが楽なので、MCとそれ以外と考えた方が良い。
まとめると以下の流れでPhoton Cloudで接続し部屋に入る。
1.PhotonNetwork.ConnectUsingSettings ("0.1");
2.PhotonNetwork.GetRoomList()で部屋一覧を入手
3.取得したroomのcustomPropertiesで部屋の状況を把握
4.CreateRoom()もしくはJoinRoom()で部屋へ接続
ソースコードはこんな感じ。
ソースコードを実行したデモはこんな感じ。
https://dl.dropboxusercontent.com/u/56297224/UnitySumple2/photon%20demo/photon%20demo.html
次はゲーム内の同期について。