リプレイ システム

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

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 つのバージョン番号間の比較を行うようにオーバーライドして、互換性があるかどうかを判断します。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback