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__);