レプリカを保持したままシーンを変更する方法¶
大抵のゲームでは、ゲームプレイが進むにつれて異なるシーン間を移動します。
Strixサーバーとルームの接続は、ゲームワールドや現在のシーンから分離されています。ただし、シーンを変更すると、既存のレプリカが破壊され、マルチプレイヤーの同期に影響が及ぶ可能性があります。
Strixがシーンの変更中にレプリカを表すネットワークオブジェクトを自動的に破壊しないようにするために、Strixでは複製を一時停止したり、後で再度有効にしたりする手段を提供します。
問題¶
パーティーの一員としてRPGをプレイしており、そのパーティーがダンジョンに入るところだと仮定しましょう。全パーティーメンバーのゲームクライアントがそれぞれ新しいシーン(ダンジョンの入口)をロードすることになるでしょう。シーンが変わるタイミングはクライアントごとに異なります。最も速いクライアントが新しいシーンからオブジェクトの複製を開始した後でも、他のクライアントのうちいくつかはまだ以前のシーンのままかもしれません。
この状況が生じると、遅いクライアントでは複製が以前のシーンに生成されてしまい、その後、生成したレプリカが新しいシーンをロードする際に破壊されてしまいます。
この問題は複製を一時停止することで解決できます。
解決方法¶
一時停止¶
ワールド内のネットワークオブジェクトの作成/削除を一時停止するには、StrixNetwork
シングルトンのautoInstantiateReplica
プロパティの値をfalseに設定します。
StrixNetwork.instance.autoInstantiateReplica = false;
一時停止解除¶
新しいシーンで、複製の一時停止を解除します。
一時停止を解除する場合、削除されたレプリカを再度インスタンス化する必要がありますが、これはRespawnReplicas
メソッドで行います。
また、一時停止を解除するので、autoInstantiateReplica
をtrueに設定することができます。
StrixNetwork.instance.RespawnReplicas();
StrixNetwork.instance.autoInstantiateReplica = true;