以前にマルチプレイヤー ゲームを設計したことがありますが、学習/チャレンジ用の MMORPG アーキテクチャを作成したいと考えました。単一のサーバーで数百 (または数千) の同時プレイヤーをシミュレートしたいと考えています。
これまでのところ、サーバー上のすべてのゲーム オブジェクトをできるだけ頻繁かつ迅速に更新するための適切な方法を見つけるという問題に直面していることを除けば、これまでのところ非常に良好です。
ゲーム オブジェクトとは、すべてのプレイヤー、モブ、弾丸を意味します。
問題は、処理を高速化するためにすべてのプレイヤー、モブ、弾丸がサーバー側メモリのコレクションに保存され、衝突のチェック、ヘルスの更新、動きの更新などのためにそれらすべてを反復処理するのに時間がかかりすぎることです。 .
1000 人のプレイヤーがいて、全世界に 10000 のモブがいて、すべてのプレイヤーとクリーチャーが、弾丸などの他の 5 つのゲーム オブジェクト (それ以上でもそれ以下でもない) を作成する責任があるとしましょう。
これにより、(1000 + 10000) * 5 = 55000 個のゲーム オブジェクトがコレクションに含まれます。
4 GB RAM を搭載したデュアルコア HT i5 では、すべてのオブジェクトを繰り返し処理して更新すると、永遠に (数分) かかります。これは間違っています。
反復すると、コードは次のようになります (疑似):
for(int i = 0; i < gameobjects.Count; i++) {
for(int j = 0; j < gameobjects.Count; j++) {
// logic to verify if gameobjects[i] is in range of
// gameobjects[j]
}
}
最適化として、ゲーム オブジェクトを異なるゾーンとコレクションに分割することを考えていますが、すべてのオブジェクトを毎秒数回更新する必要があるという問題は解決しません。
サーバー側ですべてのゲーム オブジェクトを更新するにはどうすればよいですか? 興味深いゲーム デザイン パターンを見つけるために徹底的に検索しましたが、これまでのところ結果はありません。:(
前もって感謝します!