C# で記述されたサーバー ベースのマルチプレイヤー ゲームに取り組んでいます。サーバーとクライアントはコードを共有し、各オブジェクトには同じint ID
. 変更されたデータのみを送信することで、ネットワークをできるだけ軽くしたいと考えています。
ゲームには多数のフィールド/プロパティを持つクラスがあり、それらは頻繁に変更されます。これらの値がいつ変化したかを検出し、これらの値をクライアント側に送信する方法を探しています。
基本的に、このアルゴリズム:
- オブジェクトが変更されたときにフラグを立てる
- ネットワーク Tick で変更されたオブジェクト:
- 各プロパティを以前の状態と比較する
- 変更された値のみを送信する
- 古い値を保存する
- クライアント側で受け取る
- 同じタイプのオブジェクトをインスタンス化するか、ID で検索します
- 新しい値を設定する
もちろん、.NET リフレクションはこの問題を解決できるかもしれませんが、各 Tick で 1000 個のオブジェクトとそのプロパティを反復処理すると、パフォーマンスのボトルネックになります。
基本型 (int、float、vector) を送信し、接続を維持できます。私の質問は次のとおりです。
オブジェクトを送信してClass
インスタンス化するための最良の方法は何ですか?
プロパティの変更を検出する方法と、プロパティをシリアル化して、受信時にクライアントでそれらの「ペア」を見つける方法。