11. 複製オブジェクト機能の概要

NetZ の複製オブジェクトは、ネットワーク中のあるひとつのステーションで操作権限を持つDOマスターと、その他のステーションでの参照複製であるDOデュプリカからなります。 DOマスターからDOデュプリカへのデータの同期は、NetZによって行われ、アプリケーションで直接データ伝送の記述を行う必要がありません。

複製オブジェクトの機能は以下の通りです。

11.1. ゲームへの複製オブジェクト機能の組み込み

ゲームを複製オブジェクトに対応する方法には、基本的に2通りあります。 ひとつは、NetZ の呼び出しとクラスをゲームのソースコードに完全に統合する方法です。 もうひとつは、ゲームを任意の方法で記述した後で、 オブジェクトに対する操作をNetZ にデリゲート(委譲)する方法です。

前者の方法は、最初からマルチプレイヤーゲームを念頭においてゲームを一から開発する場合に最適です。

後者の方法は、ゲームがすでに記述されていて、ネットワークを追加する必要がある場合に、 既存のゲーム階層を維持しながら 複製オブジェクトの階層を含めることができます。 この方法はほとんどのゲームで推奨されます。 特にシングルプレイヤーゲームを記述し、後からネットワークを構築する場合、 または現在のネットワーク処理の性能が不十分なネットワークゲームに最適です。

ゲームへの 複製オブジェクトの統合方法は、ゲームがすでに記述済みかどうかによって大きく左右されます。 ただし、どちらの組み込み方法を使用しても NetZ は同様に機能するので、選択は自由です。

ゲームに複製オブジェクトを統合する方法として、次の 4 つの手順があります。

DDL記述:
データ定義言語(DDL)ファイルに、ネットワーク全体に送信する必要がある情報、ゲームのオブジェクト、オブジェクトの属性を定義します。
DDLコンパイル:
DDL コンパイラを使用して DDL ファイルをコンパイルします。コンパイラによって、ファイルに定義されている各 DO に特有なネットワークコードが生成されます。
統合:
適切なメソッドを実装して、DDL で生成されたクラス、NEX P2Pライブラリ、コードを統合します。
最適化:
ご使用の C++ コンパイラを使用してネットワークゲームの実行ファイルを生成します。その後、ゲームの動作が完全になるまで微調整を行います。

11.2. 複製オブジェクト機能の制御形態

複製オブジェクト機能の制御形態として、ある一つのサーバーとなるステーション(通常はセッションマスター)にすべてのDOマスターを置き、各クライアントステーションが操作をサーバーステーションへ 送信して、位置などの情報を返す集中型と、システム全体にDOマスターを分散する分散型があります。

上記の集中型、分散型の制御形態どちらかに限らず、NetZ では、ほとんどのオブジェクトを分散し、少数のみをサーバーに集中にする制御形態や、 またはその反対に少数のオブジェクトを分散し、ほとんどをサーバーに集中する制御形態など、DOマスターの特性によって制御形態は個別に選ぶことができます。

11.2.1. 集中制御型

集中制御型を使用するゲームでは、サーバーがゲームの全体を制御して、個別のクライアントは常にマスターからの指示に従います。

集中制御型でDOを生成する方法は、2つあります。 ひとつは、クライアントから、サーバーにそのクライアント用の DO オブジェクトの作成をリクエストすることです。 もう一つは、クライアントに独自の DO オブジェクトをローカルで作成させ、サーバーへ移行させることです。

../_images/Fig_Overview_Centralized_Network.png

Figure 11.1 集中制御型

クライアントは、DOマスターの操作をサーバーへ送信し、サーバーではこの操作結果を全クライアントに自動的に伝播します。

11.2.2. 分散制御型

分散制御型を使用するゲームでは、、各ステーションが独自のゲーム状態をコントロールし、その担当部分の操作に権限を持ちます。

例えば、次の Figure 11.2 において、 ステーション1 がDOマスター A の移動などの操作を行い、位置の変更などの情報を他の全ステーションのDOデュプリカへ送信し同期します。 これと同様にステーション2では、DOマスターBを、ステーション3では、DOマスターCを操作して、他の全ステーションのDOデュプリカへ送信します。

../_images/Fig_Overview_Distributed_Network.png

Figure 11.2 分散制御型

分散制御型の問題として、ゲームネットワーク全体でゲームの一貫した状態がないことです。 オブジェクトA、B、Cの更新タイミングが異なり、伝搬遅延も違うため、 同期過程において、すべてのステーションですべてのオブジェクトの状態が一致することを保証できません。

11.2.3. トポロジーの選択

使用する制御形態によって NetZ が選択するネットワークトポロジーが決まってきます。 分散制御型を使用してアプリケーションを実装する場合、 P2P ネットワークトポロジーやハイブリッドネットワークトポロジーが適応します。 集中化制御型を使用してアプリケーションを実装する場合、サーバークライアントゲームトポロジーが適応します。 この場合の選択はアプリケーションの要件と物理的なネットワーク性能によって異なります。