ネットワーク上でデータ構造の同期を維持する方法は?
環境 私が取り組んでいるゲーム(一種のポイントアンドクリックグラフィックアドベンチャー)では、ゲームの世界で起こるほとんどすべてのことが、次のような構造のアクションマネージャーによって制御されます。 たとえば、オブジェクトを調べた結果、キャラクターに挨拶をさせ、少し歩き、座った場合、次のコードを生成します。 var actionGroup = actionManager.CreateGroup(); actionGroup.Add(new TalkAction("Guybrush", "Hello there!"); actionGroup.Add(new WalkAction("Guybrush", new Vector2(300, 300)); actionGroup.Add(new SetAnimationAction("Guybrush", "Sit")); これにより、新しいアクショングループ(上の画像の行全体)が作成され、マネージャーに追加されます。すべてのグループは並行して実行されますが、各グループ内のアクションはチェーン化され、2番目のグループは最初のグループが終了した後にのみ開始されます。グループ内の最後のアクションが終了すると、グループは破棄されます。 問題 ここで、この情報をネットワーク全体に複製する必要があります。そのため、マルチプレイヤーセッションでは、すべてのプレイヤーが同じものを見ることができます。個々のアクションをシリアル化することは問題ではありません。しかし、私はネットワーキングに関してはまったくの初心者であり、いくつか質問があります。この説明の単純化のために、アクションマネージャーコンポーネントを次のように抽象化できると思います。 var actionManager = new List<List<string>>(); 上記のデータ構造の内容をすべてのプレーヤー間で同期させるにはどうすればよいですか? コアの質問に加えて、私はそれに関連するいくつかの他の懸念も持っています(つまり、上記と同じ問題のすべての可能な影響): 私は、との1(サーバーとクライアントの両方として動作する選手の一人で)サーバ/クライアントアーキテクチャを使用している場合は、クライアント生み出したアクションのグループを、彼はマネージャーに直接追加、または唯一のリクエストを送信する必要がありますサーバーに、順番にすべてのクライアントにそのグループを追加するように指示しますか? パケット損失などはどうですか?ゲームは決定論的ですが、クライアントで実行されるアクションのシーケンスに矛盾があると、世界の一貫性のない状態につながる可能性があると考えています。そのような問題からどのように保護しますか? 一度に追加するアクションが多すぎると、接続に問題が発生しませんか?それを軽減する方法はありますか?