UDN
Search public documentation:

ReplicationInfosJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > ネットワーク & レプリケーション > レプリケーション情報

レプリケーション情報


ReplicationInfo (レプリケーション情報)


ReplicationInfo は、すべてのクライアント上で自動的にレプリケーションされるアクタです。クライアントとサーバーの間の通信経路の役割を果たします。

PlayerReplicationInfo (プレイヤー レプリケーション情報)


PlayerReplicationInfo が必要な理由は、クライアントがサーバーと直接通信することができる一方で、他のクライアントには直接通信することができないからです。これは、クライアントの PlayerReplicationInfo だけしか、クライアントのために存在しないからです。しかし、PlayerReplicationInfo は、各クライアント上に存在し、サーバーサイドの変数が変更した際にクライアント上で更新されます。したがって、プレイヤーが他のプレイヤーについて知りたいことがあるならば、そのプレイヤーの PlayerReplicationInfo を参照することができます。

PlayerReplicationInfoInteractionTree.jpg

変数

if (bNetDirty)

以下の変数は、クライアントとサーバー間で異なる場合にレプリケートされます。
  • Score (得点) - プレイヤーの得点です。
  • Deaths (デス) - プレイヤーがデス(機能停止)した回数です。
  • PlayerName (プレイヤー名) - プレイヤーの名前です。
  • Team (チーム) - プレイヤーが所属するチームです。
  • bAdmin (アドミニストレータ) - このゲームのアドミニストレータか否かを保持します。
  • bIsSpectator (観客) - 観客か否かを保持します。
  • bOnlySpectator (観客限定) - 当該プレイヤーが観客にしかなれないのか否かを保持します。
  • bWaitingPlayer (待機中プレイヤー) - プレイヤーがゲームに入るのを待っているのか否かを保持します。
  • bReadyToPlay (プレイ準備) - プレイヤーがプレイの準備ができているか否かを保持します。
  • StartTime (開始時間) - 当該プレイヤーのレプリケーション情報が初めて作成されたときの、サーバーサイドの経過時間です。
  • bOutOfLives (ライフ不足) - プレイヤーがライフを不足しているか否かを保持します。
  • UniqueId (一意な ID) - プレイヤーを一意に識別するためにネットワークによって使用される ID です。

if (bNetDirty && !bNetOwner)

以下の変数がレプリケートされるのは、クライアントとサーバー間で異なり、かつ、当該の PlayerReplicationInfo がクライアントによって所有されていない場合です。
  • Ping (ピン) - 当該プレイヤーのためのレプリケートされた圧縮 ping です。

if (bNetInitial)

以下の変数は、最初のレプリケーション更新時にレプリケートされます。
  • PlayerID (プレイヤー ID) - プレイヤーの一意な ID 番号です。
  • bBot (ボット) - プレイヤーがボットであるか否かを保持します。
  • bIsInactive (非アクティブ) - 当該 PRI (PlayerReplicationInfo) が GameInfo の InactivePRIArray (非アクティブ PRI 配列) から来たものか否かを保持します。

GameReplicationInfo (ゲーム レプリケーション情報)


GameReplicationInfo が必要な理由は、GameInfo がクライアントに決してレプリケートされないためです。クライアントが GameInfo について知るべき情報がまだあるため、GameReplicationInfo がサーバーとクライアント上で作成されます。したがって、GameInfo が更新され、クライアントにこの更新を通知する必要があるときはいつでも、GameInfo がこの更新を GameReplicationInfo にプッシュします。クライアント バージョンの GameReplicationInfo が更新されると、クライアントがこの更新を得ます。

GameReplicationInfoInteractionTree.jpg

変数

if (bNetDirty)

以下の変数は、クライアントとサーバー間で異なる場合にレプリケートされます。
  • bStopCountDown (カウントダウン中止) - TRUE の場合は、残り時間のカウントダウンを中止します。
  • Winner (勝利者) - ゲームの勝利者です。
  • bMatchHasBegun (マッチ開始済み) - マッチが進行中か否かを保持します。
  • bMatchIsOver (マッチ終了) - マッチが終了したか否かを保持します。

if (!bNetInitial && bNetDirty)

以下の変数は、クライアントとサーバー間で異なっている場合にレプリケートされます。ただし、初回のレプリケーション更新時には行われません。
  • RemainingMinute (残り分) - 時間制限のあるゲームにおいて残り時間をカウントダウンするのに使用されます。

if (bNetInitial)

以下の変数は初回レプリケーション更新時にレプリケートされます。
  • GameClass (ゲームクラス) - サーバーの GameInfo のクラスです。
  • RemainingTime (残り時間) - 時間制限のあるゲームにおいて時間をカウントダウンするために使用されます。
  • ElapsedTime (経過時間) - 時間制限のあるゲームにおいて時間をカウントダウンするために使用されます。
  • GoalScore (目標得点) - 現在の得点です。
  • TimeLimit (時間制限) - このマッチの時間制限です。
  • ServerName (サーバー名) - サーバーの名前です。

TeamInfo (チーム情報)


TeamInfos には、Capture the flag (旗取り) などのチームベースのゲームによって使用されるゲーム構造に関する情報が含まれています。PlayerReplicationInfo とまったく同じように、プレイヤー共通のデータを通信するために使用されます。

GameReplicationInfoInteractionTree.jpg

変数

if (bNetDirty && Role = Role_Authority)

以下の変数は、クライアントとサーバー間で値が異なる場合にレプリケートされます。ただし、データがサーバーから発せられたものである場合に限ります。
  • Score (得点) - チームの得点です。

if (bNetInitial && Role = Role_Authority)

  • TeamName (チーム名) - チームの名前です。
  • TeamIndex (チームインデックス) - チームのインデックスです。

レプリケーション情報のパターンを使用すべき場合


  • アクタがあらゆるクライアント上に存在するとは限らない場合。
    • GameInfo がクライアント上に存在しない。
    • PlayerController が、所有しているクライアント上にしか存在しない。
  • クライアントからクライアントへの通信を行う場合。
    • 全プレイヤーが所属するチームの情報を見ることができ、チーム間でスイッチする。

結論


クラスのインスタンスが、サーバー上またはクライアント上、または単一のクライアント上にしか存在しない問題はレプリケーションが解決します。そのため、マルチプレイヤーのネットワーク テスティングは、最初から始められなければなりません。単一のプレイヤーまたはサーバーと単一のクライアントでは機能するものの、より多数のクライアントが関与すると機能しなくなるという事態は、よく発生します。後の開発において問題が生じないようにするには、ネットワークの構築と関連づけてクラス設計を行う必要があります。