リプレイ システム

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

Unreal Engine (UE) には、後で見るためにゲームプレイを記録できる リプレイ システムがあります。専用サーバーでプレイされるライブ、マルチプレイヤー ゲームから、シングルプレイヤー ゲームまで、さらには 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 の前のバージョン用です。現在リリースされている Unreal Engine 5.2 に対して更新は行われていません。
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル