リプレイ システム

ゲームプレイを記録し再生するためのリプレイ システムの概要を説明します。

Choose your operating system:

Windows

macOS

Linux

UE4 には、後で見るためにゲームプレイを記録できる リプレイ システムがあります。専用サーバーでプレイされるライブ、マルチプレイヤー ゲームから、シングルプレイヤー ゲームまで、さらには Play-In-Editor セッションでも、すべてのゲームで利用可能な機能です。簡単に説明すると、リプレイ システムは DemoNetDriver を使ってビルトインのレプリケーション システムからのデータを読み出すことで機能します。 NetDriver で、ネットワーク環境でライブ ゲームプレイ環境が機能するのと似ています。実際にはマルチプレイヤー モードがなくても、マルチプレイヤー ゲームのようにデータをレプリケートするようにセットアップされたプロジェクトは、修正をしなくてもリプレイ システムと互換性があります。

これは、 DemoNetDriver がレプリケートされたデータを Replay Streamer に渡すことで機能します。Replay Streamer ではデータのフィルタリングと保存を処理します。リプレイを見る場合、 DemoNetDriver がライブ プレイ中に利用可能であったすべてのレプリケートされた情報 (リプレイのみに関連するとして指定された特殊なデータフィールド) にアクセスし、こうしたデータからゲームのイベントを再構築することができます。

リプレイ システムの機能

リプレイ システムの基本機能としては、デモの記録の開始や終了、または過去に記録されたデモの再生があります。再生モード中は、リプレイ システムは一時停止、再生速度を変更し、特定の時点にジャンプするコマンドをサポートします。システムの詳細な使用方法として、リプレイにテキスト タグ (通常はメタ タグまたはゲームに参加するプレイヤー名) を追加、テキスト タグやバージョン情報に基づき既存のリプレイにクエリーするなどがあります。リプレイ システムは C++ コードから使用できます。主に、 UGameInstance クラスおよび UWorld クラス経由で、またはコンソール コマンドやコマンドライン引数を使って使用できます。

関数または変数名

同等のコンソール コマンド

効果

UGameInstance::StartRecordingReplay

"demorec (ReplayName)"

リプレイの記録を開始します。(ReplayName) パラメータを指定しないとリプレイ システムは独自に名前を生成します。

UGameInstance::StopRecordingReplay

"demostop"

現在記録中のリプレイを停止します。

UGameInstance::PlayReplay

"demoplay (ReplayName)"

指定したリプレイを再生します。

UDemoNetDriver::GotoTimeInSeconds

"demoscrub (ReplayTime)"

リプレイで指定された時間 (秒単位) にジャンプします。

UWorld::Pauser (variable)

"demopause"

World の DemoNetDriver->ServerConnection は OwningActor 変数があります。 Pauser をその値に設定するとリプレイが一時停止します。 NULL に設定しなおすとリプレイが再開します。"demopause" コンソール コマンドはその変数を自動的に設定またはクリアします。

WorldSettings->DemoPlayTimeDilation (variable)

"demospeed (ReplaySpeed)"

時間 - スケーリングの係数を設定して再生速度を速めたり遅くしたりします。値 0.1 は通常の速さです。

AGameMode::bHandleDedicatedServerReplays (variable)

N/A

この変数を true に設定すると、専用サーバーが自動的にゲームを記録します。

DemoNetDriver と Streamers

DemoNetDriver は、 Streamers へリプリケートされたデータをパスする特別なネットワーク ドライバーで、後で再生するための情報を記録されます。 DemoNetDriver の機能、ストリーマーの詳細については、「 DemoNetDriver とストリーマー 」を参照してください。

後方互換性

リプレイ システムではバージョン 4.13 から後方互換性がサポートされています。ビルドに修正を加えることができることを意味します。すなわち、レプリケートされたプロパティを追加、削除しても、オリジナルのビルドで記録したリプレイをロードしたり、表示したりすることができます。ほとんどの場合、これは自動的に処理されます。リプレイ システムは、取り除かれた古いレプリケートされた入力フィールドをスキップするか、追加した新規にレプリケートされた入力フィールドに対してデフォルトを使用するからです。 NetSerialize がオーバーライドされた構造体では、こうしたデータ形式の違いを手作業で処理する必要があります。

この目的上、 FArchive には、 EngineNetVer 関数と GameNetVer 関数があります。これらは、エンジンとゲームのバージョンをそれぞれ特定し、現在のビルドに合うようにリプレイ データを調整することができます。 FNetworkVersion にあるデリゲート、 GetLocalNetworkVersionOverride は選択したものの uint32 バージョン番号を戻します。互換性が正確にマッチしなくてもよい場合、 FNetworkVersion には IsNetworkCompatibleOverride と呼ばれるデリゲートがあり、2 つのバージョン番号間の比較を行うようにオーバーライドして、互換性があるかどうかを判断します。

タグ
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる