Choose your operating system:
Windows
macOS
Linux
UE4 には、後で見るためにゲームプレイを記録できる
リプレイ
システムがあります。専用サーバーでプレイされるライブ、マルチプレイヤー ゲームから、シングルプレイヤー ゲームまで、さらには Play-In-Editor セッションでも、すべてのゲームで利用可能な機能です。簡単に説明すると、リプレイ システムは
DemoNetDriver
を使ってビルトインのレプリケーション システムからのデータを読み出すことで機能します。
NetDriver
で、ネットワーク環境でライブ ゲームプレイ環境が機能するのと似ています。実際にはマルチプレイヤー モードがなくても、マルチプレイヤー ゲームのようにデータをレプリケートするようにセットアップされたプロジェクトは、修正をしなくてもリプレイ システムと互換性があります。
これは、
DemoNetDriver
がレプリケートされたデータを Replay Streamer に渡すことで機能します。Replay Streamer ではデータのフィルタリングと保存を処理します。リプレイを見る場合、
DemoNetDriver
がライブ プレイ中に利用可能であったすべてのレプリケートされた情報 (リプレイのみに関連するとして指定された特殊なデータフィールド) にアクセスし、こうしたデータからゲームのイベントを再構築することができます。
リプレイ システムの機能
リプレイ システムの基本機能としては、デモの記録の開始や終了、または過去に記録されたデモの再生があります。再生モード中は、リプレイ システムは一時停止、再生速度を変更し、特定の時点にジャンプするコマンドをサポートします。システムの詳細な使用方法として、リプレイにテキスト タグ (通常はメタ タグまたはゲームに参加するプレイヤー名) を追加、テキスト タグやバージョン情報に基づき既存のリプレイにクエリーするなどがあります。リプレイ システムは C++ コードから使用できます。主に、
UGameInstance
クラスおよび
UWorld
クラス経由で、またはコンソール コマンドやコマンドライン引数を使って使用できます。
関数または変数名 |
同等のコンソール コマンド |
効果 |
---|---|---|
|
"demorec (ReplayName)" |
リプレイの記録を開始します。(ReplayName) パラメータを指定しないとリプレイ システムは独自に名前を生成します。 |
|
"demostop" |
現在記録中のリプレイを停止します。 |
|
"demoplay (ReplayName)" |
指定したリプレイを再生します。 |
|
"demoscrub (ReplayTime)" |
リプレイで指定された時間 (秒単位) にジャンプします。 |
|
"demopause" |
World の
|
|
"demospeed (ReplaySpeed)" |
時間 - スケーリングの係数を設定して再生速度を速めたり遅くしたりします。値 0.1 は通常の速さです。 |
|
N/A |
この変数を
|
DemoNetDriver と Streamers
DemoNetDriver
は、
Streamers
へリプリケートされたデータをパスする特別なネットワーク ドライバーで、後で再生するための情報を記録されます。
DemoNetDriver
の機能、ストリーマーの詳細については、「
DemoNetDriver とストリーマー
」を参照してください。
後方互換性
リプレイ システムではバージョン 4.13 から後方互換性がサポートされています。ビルドに修正を加えることができることを意味します。すなわち、レプリケートされたプロパティを追加、削除しても、オリジナルのビルドで記録したリプレイをロードしたり、表示したりすることができます。ほとんどの場合、これは自動的に処理されます。リプレイ システムは、取り除かれた古いレプリケートされた入力フィールドをスキップするか、追加した新規にレプリケートされた入力フィールドに対してデフォルトを使用するからです。
NetSerialize
がオーバーライドされた構造体では、こうしたデータ形式の違いを手作業で処理する必要があります。
この目的上、
FArchive
には、
EngineNetVer
関数と
GameNetVer
関数があります。これらは、エンジンとゲームのバージョンをそれぞれ特定し、現在のビルドに合うようにリプレイ データを調整することができます。
FNetworkVersion
にあるデリゲート、
GetLocalNetworkVersionOverride
は選択したものの
uint32
バージョン番号を戻します。互換性が正確にマッチしなくてもよい場合、
FNetworkVersion
には
IsNetworkCompatibleOverride
と呼ばれるデリゲートがあり、2 つのバージョン番号間の比較を行うようにオーバーライドして、互換性があるかどうかを判断します。