ビジュアル ロガー

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

Choose your operating system:

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

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