Unity Photon2を使用してシーン移動を同期させる簡単な方法
はじめに
前回、Photon2を使用したシーン同期についての文章を投稿しましたが、Photon2自体に簡単にシーン同期する方法がありました。
※前回の記事
https://note.com/takataok/n/ndd275f314c01
やりたいこと
Unityのオンラインプレイ実装のため、Photon2を使用している。(以降Photonと呼ぶ)
ネットワークオブジェクト作成のためには各プレイヤー同士でのシーン同期が必須であるため、シーン同期を実装する。
やり方
各プレイヤーが下のコードを実行する
PhotonNetwork.AutomaticallySyncScene = true;
これはルーム内のマスタークライアント(ホスト)のシーンと同期する設定にしている。
後はマスタークライアント側でシーン移動時のコードを以下にする。
PhotonNetwork.LoadLevel("移動したいシーン名");
これだけ。
シーン移動前に
PhotonNetwork.IsMessageQueueRunning = false;
を実行する必要はない
新たに発生した問題
私が実装した際に、まれに(10回に1回ぐらい)ゲスト側のプレイヤーが、マスタークライアントのシーン移動に合わせて移動後、すぐに前回のシーンに戻されていた。
内部実装的には以下のようにしてシーン移動を行っているらしい
私の実装の場合、ゲスト、ホストの両方でシーン読み込み時にルームプロパティを変更するようにしていた。ホストは初期設定を行い、ゲスト側は現在の設定をルームプロパティ変更用のドロップダウンに合わせる。この時、全ての設定を一度に合わせず、各項目に関係のない場所は今のルームプロパティを参照していた。この動作により、ゲストのシーン移動が先に終わった際、今のルームプロパティのcurscnが前回のシーンを持っており、ゲスト側のルームプロパティ更新時に前のシーンにとばされていた。
(特に必須の動きではないため、修正した)
要はシーン移動時にcurscnがホストと異なることがないように気を付けること
結論
ゲスト側の必要なコード
PhotonNetwork.AutomaticallySyncScene = true;
ホスト側に必要なコード
PhotonNetwork.LoadLevel("移動したいシーン名");
注意すること
ルームプロパティにcurscnが追加されるため、不用意に変えない。
この記事が気に入ったらサポートをしてみませんか?