どーも、siroponnです。
久しぶりに投稿かな。
今回は、前回書いたphotonでのシーン切り替えの続きみたいなものです。
前回photonでRoomシーン(Photonのルームとは違います)からGameシーンに遷移した部分で終わりました。今度はGameシーンからRoomシーンに行く部分を書こうと思います。
Roomシーンに行くのは簡単で、前回とは逆に実装します。
今回はゲームオーバになったとしましょう。
こんな感じかな?
//----------Gameシーンの方にあるスクリプト抜粋--------------------
//ゲームオーバになったら.
if (PhotonNetwork.player.isMasterClient && (localWaitTime >= 4f) && (!isOver) )
{
isOver = true;
PhotonNetwork.room.open = false;
PhotonNetwork.room.visible = false;
ExitGames.Client.Photon.Hashtable h = new ExitGames.Client.Photon.Hashtable() { { "GS", GameState.Progress } };
PhotonNetwork.player.SetCustomProperties(h);
ExitGames.Client.Photon.Hashtable hh = new ExitGames.Client.Photon.Hashtable() { { "BS", "Ending" } };
PhotonNetwork.room.SetCustomProperties(hh);
PhotonNetwork.DestroyAll();
pPview.RPC("ReturnToRoom", PhotonTargets.All);
}
ルームを閉じて、視えなくして、プレイヤ、ルームのプロパティ変更してphotonで生成したobject全部ぶっ壊してます。
PhotonNetowrk.DestroyAll();はやらないと、Buffer上(?)にobject情報が残るっぽいです。
やらずに、他のunityのシーンでこれを呼ぶと怒られます。
話は戻って、Gameシーン上からRoomシーンに戻ってきたら現在Photonに繋がっていてルームの中に存在するかを判定。
//----------Roomシーンにある方のスクリプト抜粋----------
void Start()
{
PhotonNetwork.isMessageQueueRunning = true;
if (PhotonNetwork.connected && PhotonNetwork.inRoom) //Gameからかえってきたら.
{
ExitGames.Client.Photon.Hashtable h = new HashTable() { { "GS", GameState.Room } };
PhotonNetwork.player.SetCustomProperties(h); //自分のプロパティを戻す.
if (PhotonNetwork.player.isMasterClient)
{
PhotonNetwork.room.open = true;
PhotonNetwork.room.visible = true;
ExitGames.Client.Photon.Hashtable hh = new HashTable() { { "BS", "idle" } };
PhotonNetwork.room.SetCustomProperties(hh); //準備中に戻す
}
sceneState = SceneState.Room;
}
else //起動時のみ.
sceneState = SceneState.Title;
}
//------------------------
sceneStateは独自で定義した列挙型です。これで、RoomシーンでもLobyに居るかRoomにいるか、はたまたまだ接続してすらいないかを判定しています。
GameシーンからRoomシーンに戻ってくるのでStartがもう一回呼び出されますね。
このやり方は1シーンだけでやってる時は出来ません。注意してください。
はい、後は特別お話することもありません。
お疲れさまでした。
今度は1シーンだけでやる方法も書きたいな。
0 件のコメント:
コメントを投稿