執筆バージョン: Unreal Engine 4.27
|
こんにちは。エンジニアの小倉です。
UE4のデバッグでは、主にブレークポイントなどを使います。しかし、例えば同じBlueprintのActorがレベルに大量に配置されているときなど、ブレークポイントを貼っても全てのインスタンスに対してブレークされてしまい、デバッグが難しいことがあります。
そこで、今回はゲーム中に存在する複数のインスタンス(例えばレベルに配置されたActorなど)の中から1つのインスタンスのみをデバッグする方法を紹介します。
1. Blueprintでのデバッグ
Blueprintのデバッグ方法は、公式ドキュメントに説明があります。
例えば、以下のようなActorがレベルに複数配置されているとします。


Blueprintでインスンタンスごとにデバッグしたいときは、BlueprintのToolBarにある『Debug Filter』を変更します。
まず、複数配置されているアクターの中から、デバッグしたいアクターをViewport上で選択します(PIE中の場合は、Ejectしてからアクターを選択します)。

この状態で選択しているアクターのBlueprintを開き、Debug Filterからデバッグしたいインスタンスを選びます。Viewportで選択しているインスタンスには末尾に(selected)という表記がされます。

Debug Filterにインスタンスを指定すると、以下のようにデバッガの挙動が変わります。
- ブレークポイントを貼ると、Debug Filterに指定したインスタンスのブレークポイントを通過したときのみブレークする
- ウォッチを追加すると、Debug Filterに指定したインスタンスのウォッチの値を見ることができる
- Debug Filterに指定したインスタンスで、実行中のノード間のワイヤーがハイライトされる
この挙動を使用すると、複数のインスタンスがあったとしても1つのインスタンスを対象にデバッグを行うことができます。

2. C++でのデバッグ
C++コードをデバッグするときも、基本的にはブレークポイントを使用します。BlueprintではDebug Filterを使いましたが、C++の場合は条件付きブレークポイントでデバッグ対象のインスタンスをフィルタリングします。
Actorの場合は、ActorLabelを使用して以下のような条件式にします(参考)。以下の例では、ワールドアウトライナ上で名前がMyActor1となっているアクターのTickでのみブレークします。
|
wcscmp((wchar_t*)ActorLabel.Data.AllocatorInstance.Data,L"MyActor1") == 0 |

このようなブレークポイントを貼ると、条件を満たしたアクターでのみブレークすることができます。