ビジュアル ロガー

アクタの状態をキャプチャし、ゲームやエディタ内で視覚的に表示するツール。

Windows
MacOS
Linux

Visual Logger (ビジュアル ロガー) は、ゲームプレイ状態の視覚的表現を作成、記録し、そのデータをエディタ内でレビューする機能を提供する強力なデバッグ ツールです。デベロッパーは、プレイ セッション中にデバッグ出力をライブで確認したり、セッション終了後にエディタでレビューしたりできるため、ユーザーの報告やゲームの映像に基づくだけでは追跡が難しいゲームプレイのバグの解決が簡単になります。後でレビューするために情報を記録する機能は、稀な (再現が難しい) バグに対処する場合は特に重要です。例えば、ゲーム状態変数が 1 フレームの間変化するのが原因で発生する予期しない AI の動作について、データを記録して、バグが発生した前後のフレームをスクラブすることで事後調査できます。

ビジュアル ロガーを有効にするには、[Windows (ウィンドウ)] > [Developer Tools (デベロッパー ツール)] > [Visual Logger (ビジュアル ロガー)] のメニューを使用します。バージョン 4.7 より前の Unreal Engine では、コンソール コマンド「VisLog」を入力します。エディタを表示している場合は、ビジュアル ロガー ビューポートも開きます。

image_1.png

Epic Games のサンプル StrategyGame のセッション中にビジュアル ロガーを使用している様子。紫色の線は AI のパスを示している。赤色の場所マーカーはタイムラインで選択した点を示している。

ビジュアル ロガー ビューポート

エディタのビジュアル ロガー ビューポートでは、記録済みのセッションのビジュアル ロガー出力をレビューして、事後にバグ レビューを行うことができます。

image_0.png

エディタのビジュアル ロガー ビューポート。

このビューポートには、視覚的データを記録したアクタすべてのリスト、アクタ リストで選択したアクタのステータスの詳細なスナップショット、デバッグ メッセージ出力を表示するテキスト ウィンドウ、記録データをスクラブできるタイム バーがあります。

アクタ リスト

次の画像で強調表示されている領域は、記録セッション中にビジュアル ロガーに情報が記録されたアクタのリストです。ユーザーが特定のアクタのログ情報をすばやく検索できるように、検索バーもあります。

image_2.png

アクタ リストと検索バー。

アクタ スナップショット ビュー

UE_VLOG マクロでアクタが収集するデータは、次の画像で強調表示されている領域に表示されます。ビジュアル ロガーでは、アクタ リストで選択したアクタからのデータを、タイムライン スクラバで示された時間に表示します。スナップショットの一部としてビジュアル ロガーがキャプチャするデータは、ゲームのコード内でカテゴリ分けやカスタマイズできます。また、それらのカテゴリは展開したり折りたたんだりできます。

同じフレームで、同じアクタから複数のビジュアル ログ呼び出しを行うと、以前キャプチャしたデータは上書きされます。

image_6.png

アクタ スナップショット領域。カスタム カテゴリが展開されている。

テキスト ウィンドウ

ビジュアル ロガーのテキスト ウィンドウには、現在のフレームのログ メッセージがカテゴリ別に表示されます。同じカテゴリ、同じフレームで記録された複数のログ メッセージは、リストとして表示されます。

image_5.png

デバッグ メッセージが表示されるテキスト ウィンドウ領域。

タイムライン

タイムライン ビューには、任意の時点までロガーを進行 (または巻き戻し) するためのバーがあります。以下の画像では、スクラバが 23.53 秒の位置にあり、アクタ リストでは「StrategyAIController_1」が選択されています。タイム バーをスクラブすることで、記録されたログ データのさまざまな時点において、選択したアクタのステータスとテキスト ウィンドウを確認できます。

image_3.png

タイムライン領域。

ビジュアル ロガーのサポートを追加する

ビジュアル ロガーに追加できるデータ型は 3 つあります。

データ型

出力の説明

アクタ スナップショット

アクタ スナップショット領域に表示されます。アクタが存在する間、1 フレームにつき 1 回更新します。

ログ メッセージ

ビジュアル ロガーで記録するすべてのテキストはテキスト ウィンドウに表示されます。テキストは 1 フレームごとに表示されます。

デバッグ形状

ゲーム ワールドにはさまざまな形状を描画できます。それらの形状は複数フレームの間持続します。サイズや色など、調整可能なパラメータを持ちます。

アクタ スナップショットを撮影する

アクタ スナップショット ビューにデータを追加するには、まず IVisualLoggerDebugSnapshotInterface インターフェース関数を以下のように実装しなければなりません。

class MYPROJECT_API AMyActor : public AActor, public IVisualLoggerDebugSnapshotInterface

このインターフェースに唯一存在する関数 GrabDebugSnapshot はデフォルトでは何も行いません。この関数をオーバーライドしてビジュアル ロガーに情報を与えることができます。GrabDebugSnapshot はビジュアル ロギングを有効にしたビルドのみで実行するので、これに関連するすべてのコード周りの ENABLE_VISUAL_LOG マクロを確認することはグッドプラクティスです。たとえば、Actor クラスの関数定義には次のようなコード ブロックが含まれます。

#if ENABLE_VISUAL_LOG
    //~ Begin IVisualLoggerDebugSnapshotInterface interface
    // Adds information about this Actor to the Visual Logger.
    virtual void GrabDebugSnapshot(FVisualLogEntry* Snapshot) const override;
    //~ End IVisualLoggerDebugSnapshotInterface interface
#endif

次のサンプル コードは、GDC デモの一部です。FPS テンプレートの Character クラスをカスタマイズしたバージョンの AGDCCharacter にビジュアル ログを追加しました。このコードは、"GDC Sample" カテゴリの下にエントリを 1 つ追加します。このエントリは、"Projectile Class" というラベルが付けられ、キャラクターが発射するときにスポーンする発射物のタイプを含みます。

#if ENABLE_VISUAL_LOG
void AGDCCharacter::GrabDebugSnapshot(FVisualLogEntry* Snapshot) const
{
    Super::GrabDebugSnapshot(Snapshot);
    const int32 CatIndex = Snapshot->Status.AddZeroed();
    FVisualLogStatusCategory& PlaceableCategory = Snapshot->Status[CatIndex];
    PlaceableCategory.Category = TEXT("GDC Sample");
    PlaceableCategory.Add(TEXT("Projectile Class"), ProjectileClass != nullptr ?ProjectileClass->GetName() :TEXT("None"));
}
#endif

この関数は、ビジュアル ロガーの最初の呼び出し時に自動的に実行されます。アクタ スナップショット ビューに表示したい情報を、この関数に何でも追加してください。

image_6.png

AGDCCharacter のアクタ スナップショットが表示されているビジュアル ロガー。

テキストをログ記録する

UE_VLOG マクロを使用してテキスト ウィンドウにログを記録できます。テキスト ウィンドウにはフレームごとに情報が表示されます。そのため、記録したデータをスクラブすると、現在のフレームでログ記録されたテキストのみが表示されます。テキストはどこでもログ記録できます。UE_VLOG マクロは、ビジュアル ログ システムをサポートしていないビルドのコンパイルからは削除されるため、ENABLE_VISUAL_LOG マクロを確認せずに使用しても問題ありません。このマクロは、テキストに関連付けられたアクタ、ログ カテゴリ、冗長性レベル (表示のフィルタリングに使用)、およびテキスト自体を示すパラメータを受け取ります。

次のサンプルコードでは、カスタマイズされた Character が UE_VLOG を使用して、発射物を発射した後の情報を記録します。

void AGDCCharacter::OnFire()
{
    // Try to fire a projectile
    if (ProjectileClass != NULL)
    {
        // Collect our aim rotation.
        const FRotator SpawnRotation = GetControlRotation();
        // MuzzleOffset is in camera space, so transform it to world space before offsetting from the character location to find the final muzzle position.
        const FVector SpawnLocation = GetActorLocation() + SpawnRotation.RotateVector(GunOffset);
        UWorld* const World = GetWorld();
        if (World != NULL)
        {
            // Spawn the projectile into the world at the muzzle's location.
            World->SpawnActor<AGDCProjectile>(ProjectileClass, SpawnLocation, SpawnRotation);
            // Log this event with the Visual Logger.
            UE_VLOG(this, LogFPChar, Verbose, TEXT("Fired projectile (%s) from location (%s) with rotation (%s)"), 
                *ProjectileClass->GetName(),
                *SpawnLocation.ToString(), 
                *SpawnRotation.ToString());
        }
    }
    // ...
}

image_6.png

AGDCCharacter のデバッグ テキストを表示するビジュアル ロガー。

重複したメッセージを標準ログに送信する必要がある場合は、同じデータを使用して UE_VLOG を呼び出した後に UE_LOG を続ける代わりに、UE_VLOG_UELOG を使用します。

デバッグ形状を描画する

ゲーム ワールド内の形状情報をログ記録する機能は、何が起きているのかの視覚化に役立つ強力な機能です。次の画像は、ビジュアル ロガーでサポートされている各種形状の一部を示したものです。

image_7.jpg

パス情報、円柱、コーン、カプセル、ボックス形状。

次のマクロは、形状のログ記録のサポートを提供しています。各マクロには、形状を持ったアクタ、ログ カテゴリ、冗長性レベル、追加の形状定義パラメータ (形状によって異なる)、形状に伴うテキストが必要です。次の表に、利用可能な形状と、各形状に必要な追加パラメータに関する情報を示します。

形状

説明

追加のパラメータ

UE_VLOG_SEGMENT

1 ピクセルの厚さの線分。

FVector Start Point

FVector End Point

FColor Color

UE_VLOG_SEGMENT_THICK

さまざまな厚さの線分。

FVector Start Point

FVector End Point

FColor Color

float Thickness

UE_VLOG_LOCATION

球。

FVector Location

float Radius

FColor Color

UE_VLOG_BOX

座標軸に平行なボックス。

FVector Center Location

FColor Color

UE_VLOG_OBOX

回転したボックス。

FVector Center Location

FMatrix Box Rotation

FColor Color

UE_VLOG_CONE

コーン。

FVector Origin Point

FVector Cone Direction

float Cone Length

float Cone Angle In Degrees

FColor Color

UE_VLOG_CYLINDER

円柱。

FVector Start Point

FVector End Point

float Cylinder Radius

FColor Color

UE_VLOG_CAPSULE

カプセル。

FVector Center Point

float Half-Height

float Radius

FMatrix Capsule Rotation

FColor Color

UE_VLOG_MESH

3D メッシュ。

TArray<FVector> Mesh Vertices

TArray<int32> Triangle Indices (must be in groups of three)

FColor Color

UE_VLOG_CONVEXPOLY

2D 凸包ポリゴン。

TArray<FVector> Hull Points

FColor Color

UE_VLOG_ARROW

矢印線分。

FVector Tail Location

FVector Head Location

FColor Color

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