見出し画像

Unity Photon2を使用してシーン移動を同期させる簡単な方法

はじめに

前回、Photon2を使用したシーン同期についての文章を投稿しましたが、Photon2自体に簡単にシーン同期する方法がありました。
※前回の記事
https://note.com/takataok/n/ndd275f314c01

やりたいこと

Unityのオンラインプレイ実装のため、Photon2を使用している。(以降Photonと呼ぶ)
ネットワークオブジェクト作成のためには各プレイヤー同士でのシーン同期が必須であるため、シーン同期を実装する。

やり方

各プレイヤーが下のコードを実行する

PhotonNetwork.AutomaticallySyncScene = true;

これはルーム内のマスタークライアント(ホスト)のシーンと同期する設定にしている。

後はマスタークライアント側でシーン移動時のコードを以下にする。

PhotonNetwork.LoadLevel("移動したいシーン名");

これだけ。

シーン移動前に

 PhotonNetwork.IsMessageQueueRunning = false;

を実行する必要はない

新たに発生した問題

私が実装した際に、まれに(10回に1回ぐらい)ゲスト側のプレイヤーが、マスタークライアントのシーン移動に合わせて移動後、すぐに前回のシーンに戻されていた。

内部実装的には以下のようにしてシーン移動を行っているらしい

画像1

私の実装の場合、ゲスト、ホストの両方でシーン読み込み時にルームプロパティを変更するようにしていた。ホストは初期設定を行い、ゲスト側は現在の設定をルームプロパティ変更用のドロップダウンに合わせる。この時、全ての設定を一度に合わせず、各項目に関係のない場所は今のルームプロパティを参照していた。この動作により、ゲストのシーン移動が先に終わった際、今のルームプロパティのcurscnが前回のシーンを持っており、ゲスト側のルームプロパティ更新時に前のシーンにとばされていた。
(特に必須の動きではないため、修正した)

要はシーン移動時にcurscnがホストと異なることがないように気を付けること

結論

ゲスト側の必要なコード

PhotonNetwork.AutomaticallySyncScene = true;

ホスト側に必要なコード

PhotonNetwork.LoadLevel("移動したいシーン名");

注意すること

ルームプロパティにcurscnが追加されるため、不用意に変えない。


この記事が気に入ったらサポートをしてみませんか?