読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Photon Cloudでインターネット経由の協力・対戦プレイを(接続編)

先日PhotonCloudゲームジャムに参加してきたので、Photonについて記述しようと思う。

スクリーンショット 2013-07-07 23.12.58

Photon Cloudについてのまとめはこちら

http://terasur.blog.fc2.com/blog-entry-506.html

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://gist.github.com/tsubaki/5928568

ソースコードを実行したデモはこんな感じ。

https://dl.dropboxusercontent.com/u/56297224/UnitySumple2/photon%20demo/photon%20demo.html

次はゲーム内の同期について。