i++

プログラム系のメモ書きなど

Unreal Engine : C/C++ コードからのログ出力

コンソール(Output Log)へのログ出力と、ゲーム画面上へのログ出力の2通りの方法でログを確認できます。

Console ログ出力

UE_LOG(カテゴリ名, ログレベル, テキストフォーマット, テキスト引数) を使用します。

カテゴリなし
// LogTemp は定義なしで使用可能なカテゴリです
UE_LOG(LogTemp, Warning, TEXT("%s: Hello!"), __FUNCTIONW__);
単一ファイル用カテゴリ
// このカテゴリを使う .cpp 内で定義します
// カテゴリ名を "(ダブルクオーテーション)で囲んで文字列として定義する必要はありません
DEFINE_LOG_CATEGORY_STATIC(LogCategoryName, Warning, All);

UE_LOG(LogCategoryName, Warning, TEXT("%s: Hello!"), __FUNCTIONW__);
複数ファイル用カテゴリ
// (プロジェクト名).h に書きます
DECLARE_LOG_CATEGORY_EXTERN(LogCategoryName, Warning, All);

// (プロジェクト名).cpp に書きます
DEFINE_LOG_CATEGORY(LogCategoryName);

// ログを出すところで
UE_LOG(LogCategoryName, Warning, TEXT("%s: Hello!"), __FUNCTIONW__);
ログレベルの種類
レベル 備考
Fatal コンソールにログを出力すると同時にゲームをクラッシュさせます
(試しにコンストラクタに書いてみたらエディタの方がクラッシュしました…)
Error ログテキストは赤色
Warning ログテキストは黄
Display ログテキストは灰色
Log Log 以下のレベルのメッセージはコンソールには出力されず、ログファイルにのみ記録されます
(とドキュメントからは読み取れますが、自分の環境では Log までは Output Log に出力され、Verbose 以下から表示が消えました)
Verbose
VeryVerbose
All 実態は VeryVerbose です(All = VeryVerbose と定義されています)

画面ログ出力

GEngine->AddOnScreenDebugMessage(id, 表示時間, テキスト色, 表示するテキスト) を使用します。
GEngine は利用できない可能性があるので、AddOnScreenDebugMessage を呼び出す前にその有無をチェックする必要があります。マクロを書いておくと楽です。

#include "EngineGlobals.h"
#include "Runtime/Engine/Classes/Engine/Engine.h"

// 第1引数に -1 以外の数値を渡すと、前にその数値を使って出力したログを上書きします。-1 の場合は常に上書きせずログが追加されます。
// 第2引数は表示する時間(秒)
#define DISPLAY_LOG(fmt, ...) if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(fmt), __VA_ARGS__));

DISPLAY_LOG("%s: Hello at line %d", __FUNCTIONW__, __LINE__);

参考