
概要
ゲームにおけるネットワーキングまたはレプリケーションとは、インターネット接続を介して複数のマシン間でゲームプレイ情報を通信する機能のことです。Unreal Engine は、開発者がマルチプレイヤー ゲームの制作を効率化できるように、堅牢なネットワーキング フレームワークを備えています。
ネットワーク対応物理 はネットワーキング フレームワークの一部であり、物理駆動シミュレーションをマルチプレイヤー環境で機能させることができます。Unreal Engine の物理レプリケーションとは、物理をシミュレートする複製された動きを持つアクタを指します。これらのシミュレーションは、ゲームプレイ中にローカル クライアント (プレイヤーのマシン) 内で実行されます。
従来のネットワーク対応物理の最大の課題は、シミュレートしているオブジェクトが衝突したときの相互作用このような相互作用を複製することは、オブジェクトの移動速度が速くなるほど、またネットワーク レイテンシーが大きくなるほど (ネットワーク接続の速度が遅くなるほど) 難しくなります。これらの課題によって、ゲーム内で実際にシミュレートできるものが制限されます。
Unreal Engine のネットワーキングについて詳しくは、ドキュメントの「ネットワーキングとマルチプレイヤー」セクションを参照してください。
デフォルトのレプリケーション モード
デフォルト のレプリケーション モードは、Unreal Engine のレガシーの物理レプリケーション モードです。このモードは 自身の動きを複製し、ルート コンポーネント が 物理をシミュレート するように設定されているアクタで有効です。
このモードでは、クライアント上の各オブジェクトの速度をその時点のサーバー上のオブジェクトの速度に一致するように変更することで、シミュレーションを複製します。クライアントがサーバーに権限のあるオブジェクトからデータを受け取るには、往復所要時間 (RTT) の半分の時間がかかります。オブジェクトをサーバー上の現在の位置で複製するために、受信した状態データを往復所要時間の半分だけ事前に推測します。
このようなレプリケーションでは、以下の 2 つの要因を考慮に入れています。
- クライアント内のオブジェクトの位置と予測されるサーバー上の位置の潜在的なオフセット。
- サーバー上のオブジェクトの速度。
オブジェクトの潜在的なオフセットは、必要な補正時間で除算されます。これによって計算される速度 (距離 ÷ 時間) が、オブジェクトのサーバー速度に追加されます。その結果、必要な補正時間にわたってオブジェクトの位置が補正されます。
オブジェクトの速度、位置、回転に対するローカルで変更は、サーバーのオブジェクトの速度によって上書きされるため、デフォルトのレプリケーション モードでは相互作用が適切に処理されません。その結果、ローカルでの相互作用にかかわらず、オブジェクトの位置はクライアント側で修正されます。
予測補間モード
予測補間 レプリケーション モードは、サーバーに権限のあるアクタに向けて設計されています。これは、デフォルト モードと同様に、クライアント上の各オブジェクトの速度を、その時点でのサーバー上のオブジェクトの速度に一致するように変更することで機能します。ただし、このモードは予測的に行われる (サーバーとクライアントに対して同じように適用されることが期待される) 限り、クライアントでの相互作用やローカルな物理的変化をより適切に処理できるように設計されています。
このモードでは、オブジェクトの最終速度を計算するときにオブジェクトのサーバー速度に加えて、オブジェクトのローカル (クライアント側) 速度を考慮に入れます。さらに、往復所要時間 (RTT) (レイテンシー) と現在の送信レートの時間間隔 (クライアントがサーバーからデータを受信する時間間隔) の両方に基づいて補正を処理します。
その結果、サーバーが同じ力の結果をクライアントに送り返す前に、クライアントが物体に予測された力を加えることができる物理シミュレーションが可能となります。クライアントは、プッシュすることでオブジェクトとやり取りすることもできます。以下に例を示します。
大きいレイテンシーや速い速度は、物理レプリケーションの質を低下させることに注意する必要があります。ただし、これはプロジェクトに合わせてレプリケーション設定を調整することで、バランスを取ることができます。
再シミュレーション モード
再シミュレーション のレプリケーション モードは、サーバーに権限のあるポーンとアクタに向けて設計されています。
再シミュレーションは、完全にクライアント側で前方予測されます。つまり、クライアントがサーバーより往復所要時間 (RTT) の半分だけ先に進んでいることを意味します。
このモードはクライアントが物理を完全に予測できるようにすることで、物理ポーンを可能にし、マルチプレイヤーでの相互作用の処理精度を向上させるために設計されています。クライアントはサーバーより往復所要時間 (RTT) の半分だけ先に進み、サーバーからの確認データを受信するまでには完全な RTT 分先に進んでいます。そのため、物理シミュレーションは物理ティックごとに物理ステートの履歴を少なくとも RTT の時間分キャッシュする必要があり、CPU とメモリを消費します。
クライアントはサーバーからステート情報を受け取ると、対応する物理フレームの履歴にキャッシュされている物理ステートと比較します。ステート情報の差が大きい場合、物理再シミュレーションがトリガーされます。
再シミュレーションは、物理シミュレーションをキャッシュされた履歴ステートまで巻き戻し、受信したサーバーのステートに基づいてエラーを修正し、現在の物理ティックまで再度物理シミュレーションを行うことで実行されます。
再シミュレーションの終了時にオブジェクトが再シミュレーション前とは異なるステートになることがあり、その結果、オブジェクトの位置が急に変わる可能性があります。この場合、モードによってオブジェクトのレンダリングが現在のステートから新しいステートに補間されます。
再シミュレーションは、他のアクタが予測補間を同時に実行しているときに、アクタとポーンで使用できます。目的は、2 つの異なるレプリケーション モードを実行するアクタ間の相互作用を適切に処理することです。予測補間によって複製されるアクタは、再シミュレーションによって複製されるアクタと比べてよりパフォーマンスに優れ、ネットワークの負荷も大きくありません。
物理ポーンは、プレイヤーの入力により、物理的な力でポーンの動きを駆動することで機能します。これらの入力は、ネットワーク物理 コンポーネントにより、再シミュレーション中に適用されます。
ネットワーク物理コンポーネントはネットワーキング、履歴キャッシュ、入力の再シミュレーション、ポーンとアクタのカスタム ステートを処理します。ネットワーク物理コンポーネントは低レベル システムであり、C++ によって手動で実装する必要があります。
ネットワーク対応物理設定
[Physics (物理)] カテゴリの [Project Settings (プロジェクト設定)] で、複数のネットワーク対応物理設定を変更できます。
また、ネットワーク対応物理レプリケーション モードを使用しているアクタに ネットワーク物理設定 を追加して、物理レプリケーション設定を上書きすることもできます。
さらに、コンソールで コンソール コマンド を入力することでネットワーク物理設定をさらに詳細に構成できます。np2.PredictiveInterpolation と入力すると 予測補間 のすべてのオプションを、np2.Resim および p.Resim と入力すると 再シミュレーション のすべてのオプションを確認できます。