レプリカを保持したままシーンを変更する方法

大抵のゲームでは、ゲームプレイが進むにつれて異なるシーン間を移動します。

Strixサーバーとルームの接続は、ゲームワールドや現在のシーンから分離されています。ただし、シーンを変更すると、既存のレプリカが破壊され、マルチプレイヤーの同期に影響が及ぶ可能性があります。

Strixがシーンの変更中にレプリカを表すネットワークオブジェクトを自動的に破壊しないようにするために、Strixでは複製を一時停止したり、後で再度有効にしたりする手段を提供します。

問題

パーティーの一員としてRPGをプレイしており、そのパーティーがダンジョンに入るところだと仮定しましょう。全パーティーメンバーのゲームクライアントがそれぞれ新しいシーン(ダンジョンの入口)をロードすることになるでしょう。シーンが変わるタイミングはクライアントごとに異なります。最も速いクライアントが新しいシーンからオブジェクトの複製を開始した後でも、他のクライアントのうちいくつかはまだ以前のシーンのままかもしれません。

この状況が生じると、遅いクライアントでは複製が以前のシーンに生成されてしまい、その後、生成したレプリカが新しいシーンをロードする際に破壊されてしまいます。

この問題は複製を一時停止することで解決できます。

解決方法

一時停止

ワールド内のネットワークオブジェクトの作成/削除を一時停止するには、StrixNetworkシングルトンのautoInstantiateReplicaプロパティの値をfalseに設定します。

StrixNetwork.instance.autoInstantiateReplica = false;

シーン変更

パーティーメンバー全員が複製を一時停止した後で新しいシーンをロードします。

SceneManager.LoadScene("OtherSceneName");

一時停止解除

新しいシーンで、複製の一時停止を解除します。

一時停止を解除する場合、削除されたレプリカを再度インスタンス化する必要がありますが、これはRespawnReplicasメソッドで行います。

また、一時停止を解除するので、autoInstantiateReplicaをtrueに設定することができます。

StrixNetwork.instance.RespawnReplicas();
StrixNetwork.instance.autoInstantiateReplica = true;