はじめに
この記事は [UE4] ブロック崩しを作る #4 PlayerController (C++) の続きになります。
第3, 4回では C++ を使いましたが、C++がうまく動かなかった時に、その原因を調べるデバッグ手法についてまとめます。
参考リンク
ログ出力(コンソール画面)
UE_LOG を使って UE4 Editor の Output log にログを表示させる事ができます
使用例
void APlayerController_BB::BeginPlay()
{
:
UE_LOG(LogTemp, Display, TEXT("Display log"));
UE_LOG(LogTemp, Warning, TEXT("Warning log"));
UE_LOG(LogTemp, Error, TEXT("Error log"));
出力例
- 第一引数に指定している LogTemp はカテゴリーです
- 第二引数に指定している Display などはVerbosityです
- それぞれの引数にどのような値を指定できるかは下記のヒストリア様の記事が詳しいです
- また、こちらのログファイルとしても出力されています。
- 出力される場所は プロジェクトフォルダの Saved → Logs の中のです。
ログ出力(ゲーム画面)
AddOnScreenDebugMessage はゲーム画面にログを表示させる事ができます。
(使いどころとしてはログではなくデバッグ出力?)
使用例
void APlayerController_BB::BeginPlay()
{
:
GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, "Log");
GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Blue, "Log2");
GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Green, "Log3");
出力例
- 第1引数に指定している -1 は Key です
- 同じ Key の表示は1つしか画面に表示されません (Key = -1 だけは例外で同時にも表示できる)
- 使用例の Key = -1 を全て Key = 0 に変えると、最後の Green しか表示されなくなります
- 第2引数に指定している 10.0f は 表示時間 です。(10.0f = 10秒)
- それぞれの引数にどのような値を指定できるかは公式のドキュメントが詳しいです
- ドキュメントにあるように第5引数、第6引数も指定できます
- 第5引数 bool bNewerOnTop
- 第6引数 const FVector2D & TextScale
Assert
UE4 では Assert というキーワードは使わず check, verify, ensure を使うようです。
使用例
void APlayerController_BB::BeginPlay()
{
Super::BeginPlay();
APawn* pPawn = GetPawn();
check(pPawn == nullptr); // わざと assert に引っかかるように判定を変更
:
出力例
- なんと check では Editorごと終了してしまいます
- 例外が発生したファイル名やその行数なども表示されるのですが、開発中にはちょっと使いづらそうです
- check だけではなく verify もエディタごと終了してしまうのは同様のようです
-
ensure はエディタは終了しませんが、ゲームも止まることはありません
- Output Log には下記のようなログが出力されます
- check, verify, ensure も次に紹介する Visual Studio で Attach している状態であれば発生時にデバッガで捕まるようになります
ブレークポイント
Visual Studio でブレークポインを貼れるようにするには下記の手順が必要です
- UE4デバッグシンボルのインストール
- Visual Studio でコード内にブレークポイントを追加
- Visual Studio から UE4 Editor に Attach
- UE4 Editor で Play を行う
UE4デバッグシンボルのインストール
- 「Epic Games Launcher」を開く
- 「Unreal Engine」→「Library」を選択して UE4 の Options を表示させる
- 表示された Options から「Editor symbols for debugging」にチェックを入れて「Apply」をクリック
- 36GB超え! のファイルがダウンロードされます
Visual Studio でコード内にブレークポイントを追加
コード内の止めたい場所にブレークポイントを追加します
Visual Studio から UE4 Editor に Attach
Project と Visual Studio を起動します
Visual Studio の上部メニューから「Debug」→「Attach to Process...」を選択します
表示されたウィンドウから「UE4Editor.exe」を選択し、「Attachボタン」をクリックします
UE4 Editor で Play を行う
UE4 Editor の Play を行うと、ブレークポイントまで処理が進んだ際に、ブレークポイントの場所で止まるようになります。
#まとめ
- 引数の範囲チェックなど普段使いでは UE_LOG の色付きログ(Warning や Error)で出力するのが良さそうです
- Assert目的には ensure を使うのがいいかもしれません(Editorが落ちないので)
- どうしても不明なバグに遭遇したら追加でログを仕込んだり ブレークポイント で引っ掛けて確認するのが良さそうです
- 他にも有用なデバッグ手法はあると思いますので、調べがついたらこの記事に追記してゆきます
次回
次回はブロック崩しのスコア表示を行います。
スコア表示のための UE4 での UI 作成方法、表示方法、C++ からの UI内容の更新方法 についてまとめます。