1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[UE4] ブロック崩しを作る #5 Debug (C++)

Last updated at Posted at 2022-02-01

はじめに

この記事は [UE4] ブロック崩しを作る #4 PlayerController (C++) の続きになります。
第3, 4回では C++ を使いましたが、C++がうまく動かなかった時に、その原因を調べるデバッグ手法についてまとめます。

参考リンク

[UE4] UE_LOGについてあれこれ

ログ出力(コンソール画面)

UE_LOG を使って UE4 Editor の Output log にログを表示させる事ができます

使用例

PlayerController_BB.cpp
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"));

出力例

image.png

  • 第一引数に指定している LogTemp はカテゴリーです
  • 第二引数に指定している Display などはVerbosityです
  • それぞれの引数にどのような値を指定できるかは下記のヒストリア様の記事が詳しいです
  • また、こちらのログファイルとしても出力されています。
    • 出力される場所は プロジェクトフォルダの Saved → Logs の中のです。

ログ出力(ゲーム画面)

AddOnScreenDebugMessage はゲーム画面にログを表示させる事ができます。
(使いどころとしてはログではなくデバッグ出力?)

使用例

PlayerController_BB.cpp
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");

出力例

image.png

  • 第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 を使うようです。

使用例

PlayerController_BB.cpp
void APlayerController_BB::BeginPlay()
{
    Super::BeginPlay();
    APawn* pPawn = GetPawn();
    check(pPawn == nullptr); // わざと assert に引っかかるように判定を変更
    :

出力例

image.png

  • なんと check では Editorごと終了してしまいます
    • 例外が発生したファイル名やその行数なども表示されるのですが、開発中にはちょっと使いづらそうです
  • check だけではなく verify もエディタごと終了してしまうのは同様のようです
  • ensure はエディタは終了しませんが、ゲームも止まることはありません
    • Output Log には下記のようなログが出力されます
  • check, verify, ensure も次に紹介する Visual Studio で Attach している状態であれば発生時にデバッガで捕まるようになります

image.png

ブレークポイント

Visual Studio でブレークポインを貼れるようにするには下記の手順が必要です

UE4デバッグシンボルのインストール

  • 「Epic Games Launcher」を開く
  • 「Unreal Engine」→「Library」を選択して UE4 の Options を表示させる

image.png

  • 表示された Options から「Editor symbols for debugging」にチェックを入れて「Apply」をクリック
    • 36GB超え! のファイルがダウンロードされます

image.png

Visual Studio でコード内にブレークポイントを追加

コード内の止めたい場所にブレークポイントを追加します

Visual Studio から UE4 Editor に Attach

Project と Visual Studio を起動します
Visual Studio の上部メニューから「Debug」→「Attach to Process...」を選択します
image.png

表示されたウィンドウから「UE4Editor.exe」を選択し、「Attachボタン」をクリックします
image.png

UE4 Editor で Play を行う

UE4 Editor の Play を行うと、ブレークポイントまで処理が進んだ際に、ブレークポイントの場所で止まるようになります。
image.png

#まとめ

  • 引数の範囲チェックなど普段使いでは UE_LOG の色付きログ(Warning や Error)で出力するのが良さそうです
  • Assert目的には ensure を使うのがいいかもしれません(Editorが落ちないので)
  • どうしても不明なバグに遭遇したら追加でログを仕込んだり ブレークポイント で引っ掛けて確認するのが良さそうです
  • 他にも有用なデバッグ手法はあると思いますので、調べがついたらこの記事に追記してゆきます

次回

次回はブロック崩しのスコア表示を行います。
スコア表示のための UE4 での UI 作成方法、表示方法、C++ からの UI内容の更新方法 についてまとめます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?