敵の検知距離を 800 に設定したのに、目の前のプレイヤーに反応しない。数値が正しく入っていても、その範囲がゲーム画面のどこまで届くかは、思い描きにくいものです。
そんなときは、敵の周りに半径800の球を描いてみましょう。プレイヤーが球の外にいるなら、まず距離を調べられます。球の内側にいるなら、向きや壁の遮りなど、次の条件へ進めます。
この記事では、確認用の線や球を描く Draw Debug 系ノードを試します。Print String で値を読み、Draw Debugで位置関係を見る。2つを組み合わせると、ゲーム内部の動きを追いやすくなります。
この記事でわかること
- 位置・半径・向きを、球や円錐として表示する
- Durationと、描画を呼ぶタイミングの関係
- エディタ標準の表示と、自分で描く表示の使い分け
- Visual Loggerで、記録された時点を読み返す
数値をゲーム世界の大きさに結びつける
UEの標準の長さの単位はcmです。半径 800 は8mで、中心から球の表面まで の距離を表します。端から端までの直径は16mになります。

分かりにくいのは数値そのものより、「どこを中心に」「どの方向へ」「どこまで」測っているかです。たとえば、攻撃判定の中心が手ではなく足元になっていたり、見張りの正面がモデルの顔とは違う方向を向いていたりすることがあります。
実際の判定で使っている位置や距離を、そのまま描画にも渡す と、この食い違いを探せます。表示用に別の数値を入れると、図だけ正しく見えることがあるので注意しましょう。
Draw Debug系ノードの使い分け
BlueprintのEvent Graphで Draw Debug と検索すると、図形ごとのノードを選べます。

| ノード | 描くもの | 使いどころ |
|---|---|---|
| Draw Debug Sphere | 球の輪郭 | 敵の検知距離、爆発の範囲 |
| Draw Debug Line | 始点から終点への線 | 敵とターゲットの位置関係 |
| Draw Debug Box | 箱の輪郭 | 部屋やトリガーの範囲 |
| Draw Debug Arrow | 矢印 | 移動やノックバックの向き |
| Draw Debug Cone | 円錐の輪郭 | 正面へ広がる視界の目安 |
| Draw Debug String | 3D空間の指定位置に文字 | 敵の近くに現在の状態を出す |
まずは 位置・大きさ・色・表示時間 を押さえれば試せます。Boxの「Extent」は箱全体の幅ではなく、中心から各面までの半分の大きさです。Coneは平面の扇形ではなく、上下にも広がる円錐を描きます。
Draw Debug Stringでは「Text Location」に文字を出す位置を指定します。たとえばActorの位置に (0, 0, 120) を足せば、その位置より120cm上へ出せます。このように世界全体の座標を渡す場合は「Test Base Actor」を未指定にします。相手を指定した場 合は、そのActorを基準にした位置になるため、2つの指定方法を混ぜないようにします。
Line Traceには専用の表示設定があります。 Line Traceは、始点から終点へ線を伸ばして、何に当たるか調べる処理です。
Line Trace by Channelの「Draw Debug Type」を「For Duration」にすると、調べた線とヒット位置を表示できます。トレース自体を調べるなら、この設定が手軽です(→ Line Traceの記事)。
Durationは、線を残す秒数
Duration は、一度描いた図形を何秒残すかの設定です。ここではSphereやConeなど、線で図形を描くノードを扱います。0 は「1フレームだけ」。フレームは、ゲームの画面を1回更新する単位です。

| 呼ぶ場所 | Duration | 見え方 |
|---|---|---|
| Event BeginPlay:開始時に1回 | 10.0 | 描いた場所に10秒残る |
| Event BeginPlay:開始時に1回 | 0.0 | 1フレームで消える |
| Event Tick:毎フレーム | 0.0 | 毎回描き直すので、動く対象を追える |
BeginPlayで描いた球は、その後Actorが動いても追いかけ ません。動く敵に合わせたいなら、Tickから毎回、その時点の位置を渡します。逆に、TickでDurationを長くすると古い線も残り、軌跡のように重なって見えます。
標準のBlueprint用Draw Debug Sphereには「Persistent Lines」という設定はありません。静止した図形をゆっくり見たいときは、まずDurationを長くしましょう。C++向けの記事に出てくる設定と混同しないことが大切です。
先にエディタの表示を試す
既にある当たり判定やライトの範囲なら、描画ノードを作らなくても確認できる場合があります。
| 見たいもの | 方法 |
|---|---|
| 当たり判定の形 | ビューポートの「Show → Collision」や、Play中のコンソールコマンド show collision |
| NavMesh:AIが経路を探すための歩行可能領域 | レベルのビューポートで P。表示するにはNavMeshが用意されている必要がある |
| Point Lightなどの影響範囲 | ライトActorを選択する |
| Sphere / Box Collisionの形 | Blueprintエディタやレベルで、そのコンポーネントを選択する |
コリジョン は当たり判定、コンポーネント はActorに付ける部品です。Sphere Collisionを選んで半径を変えるだけでも、大きさを目で確かめられます。
Draw Debugが役立つのは、Play中に動く範囲を追うときや、変数・計算結果から作った位置を見たいときです。今回の実践は、半径を覚える変数から球を描きます。

実践:半径800の範囲と、正面の向きを描く
Third Personテンプレートの試験用レベルで、範囲を表示する BP_Guard を作ります。まずは 表示だけを作り、AIの発見・追跡処理は付けません。球を描くことと、その中に入った相手を検知することは別の処理だからです。
① 確認用Actorを置く
Actorは、レベルへ配置するものの基本となるクラスです。ここでは見張りの代わりに、箱を目印にしたActorを用意します。
- コンテンツブラウザで「Blueprint Class → Actor」を作り、
BP_Guardと名付けます。 - 開いて「Add」から「Static Mesh」を追加し、Static Mesh欄に
Cubeを選びます。これは位置が分かるように置く目印です。 - 「My Blueprint → Variables」で、Float型の
SightRangeを作ります。Floatは小数を扱える数値型です。 - Compileしてから初期値を
800.0にし、保存します。 - レベルへ1体配置し、広く歩ける床の上へ置きます。ActorのScaleは
(1, 1, 1)、Rotationは(0, 0, 0)にします。箱が床に埋まらないよう位置を調整し、レベルを保存します。
SightRange は範囲を表すために自分で作った変数名です。UEがこの名前を見て、自動でAIの視覚機能を有効にするわけではありません。
② 球を描く
BP_GuardのEvent Graphで、Event Tick の白い実行ピンから Draw Debug Sphere を追加します。次のように入力を設定します。

図の「次のConeへ」は、後の手順でつなぐ先を示す注記です。今はSphereまでで試せます。
| 入力 | つなぐ値・設定 |
|---|---|
| Center | Get Actor Location のReturn Value。TargetはSelf |
| Radius | 変数 SightRange のGet |
| Segments | 16 |
| Line Color | 青 |
| Duration | 0.0 |
| Thickness | 2.0 |
Selfは、このグラフを動かしているBP_Guard自身 です。Get Actor LocationはそのActorの位置を読み出し、Return Valueから渡します。ここでの位置はモデルの見た目の中心とは限らず、Actorの基準点です。
変数のGetは、変数をグラフへドラッグして「Get」を選ぶと置けます。Get Actor Locationや変数のGetには白い実行ピンがなく、値の出力をSphereの対応する入力へつなぎます。白い実行線はTickからSphereへ直接つなぎます。
Compile・SaveしてPlayすると、箱の位置を中心に青い球が出ます。カメラを動かし、球の内側と外側を歩いて比べてみてください。床に隠れる下半分があっても、球全体の中心は箱のActorの位置です。
次にPlayを止め、SightRangeの初期値を 1200.0 に変えて再度Playします。球が広がれば成功です。範囲が8mから12mへ変わったことを、周囲の床や壁と見比べられます。
③ 正面へ円錐を描く
Playを止め、Draw Debug Sphereの白い出力から Draw Debug Cone へつなぎます。今度は距離だけでなく、Actorの向きも使います。

| 入力 | つなぐ値・設定 |
|---|---|
| Origin | Get Actor Location のReturn Value。TargetはSelf |
| Direction | Get Actor Forward Vector のReturn Value。TargetはSelf |
| Length | SightRange のGet |
| Angle Width / Angle Height | どちらも 45.0 を入力 |
| Num Sides | 16 |
| Line Color | 黄 |
| Duration / Thickness | 0.0 / 2.0 |
Forward VectorはActorの正面を表す向き です。位置ではないため、DirectionへGet Actor Locationをつながないようにします。UEではActor自身のX軸が正面にあたり、回転がゼロなら世界のXのプラス方向へ円錐が伸びます。
ここで使う標準のBlueprintノードは、角度を 度 で受け取ります。45.0 をそのまま入力してください。角度は中心線から片側への開きで、左右45度なら全体で90度です。C++のDrawDebugHelpersにある同名の関数は単位が違いますが、この手順ではラジアンへの変換は要りません。
Compile・SaveしてPlayし、黄色い円錐を確認します。Playを止めてActorのZ回転を90度に変え、再びPlayすると向きも変わります。次に「Angle Width」だけを45から60へ変えると、横方向の開きが広がります。一度に1つの値だけ変えると、何に効く設定かを確かめやすくなります。
図形から分かること、まだ分からないこと
球や円錐は、渡した値を描いた目印 です。実際のAIへ足すときは、検知処理と同じ位置・範囲・向きを渡して比べます。図形が相手に届いていても、壁の遮り、相手の設定、判定処理の呼び忘れまでは分かりません(→ AI Perception)。
| 困ったこと | 確認する場所 |
|---|---|
| 何も描かれない | BP_Guardが配置されているか、白い実行線がつながっているか、Playしているか |
| 一瞬だけ見える | BeginPlayからDuration 0で呼んでいないか |
| 古い球がいくつも残る | Tickから呼んでいるのにDurationを長くしていないか |
| 原点付近に出る | Center / Originへ位置を渡しているか |
| 円錐の向きが違う | Actorの回転とForward Vector。メッシュだけを回転させていないか |
| 円錐が細すぎる | 角度を度で渡しているか。不要なラジアン変換が入っていないか |
確認後は試験用Actorを取り除くか、描画ノードへの接続を外します。通常のゲーム処理へ組み込むなら、Boolean変数で表示のオン・オフを切り替えられるようにすると便利です。
Visual Loggerで記録した時点へ戻る
Draw Debugで困るのは、見たい瞬間が過ぎてしまうことです。「敵が一瞬こちらを向いたのは、どこを目指したからか」。その時点の情報を残しておきたいときは Visual Logger を使います。

Visual Loggerは、Actorにひも付けて送った位置・図形・状態などを、時刻と一緒に記録する道具です。ゲーム全体を動画のように巻き戻す機能ではなく、記録されたデータを読み返します。 Draw Debugで描いた球も、自動では記録されません。
- 「Window」の「Developer Tools → Visual Logger」から開きます。UEの版によってはWindow内で直接選べます。
- 記録ボタンをオンにして、Playします。
- 調べたい動きを再現したら、記録を止めてPlayも終了します。
- Actorの一覧から記録を送った対象を選び、タイムライン上の時点を選びます。タイムラインは、記録を時刻順に並べたものです。
- その時点の位置や図形、テキストを見比べます。必要なら記録をファイルへ保存します。
UEのAI機能にはVisual Loggerへ情報を送るものがありますが、すべてのActorの状態が自動で記録されるわけではありません。今回のBP_Guardは描画しかしていないため、このままでは自作の範囲や変数は記録されません。
自作の情報を残す場合は、Blueprintの「Debug → Visual Logger」にある位置・文字などの記録ノードを使います。たとえば VisLog Location(版によっては Log Location)は位置を記録するノードです。記録を開始した状態で呼び、調べたい位置をLocationへ渡します。まずDraw Debugでその場の確認に慣れ、見逃した瞬間を調べたくなったら追加するとよいでしょう。
おまけ:先に知っておくと良いこと
- 製品の範囲表示には使わない:ここで扱うデバッグ描画は開発中の確認用です。通常のShippingビルドでは表示されません。プレイヤーに見せる攻撃範囲には、地面へ模様を投影するDecalや、表示用のメッシュなどを使います。
- 描く相手を絞る:多数の敵が 毎フレーム球を描くと、その表示にも負荷がかかります。調査対象の1体から始めましょう。
- Segmentsは滑らかさを変える:球の線を分割する数です。値を増やすと滑らかになりますが、確認用なら輪郭を読める程度で十分です。
- 図の色に役割を持たせる:青は距離、黄は向きなど、自分が見分けられる組み合わせにします。図形だけでなくログや変数も調べたいときは Blueprint Debugger を組み合わせます。
まとめ
Draw Debugでは、処理に渡している位置・距離・向きを、その場に描いて確かめられます。まず球を1つ描き、半径を変えて見比べるところから始めましょう。動く対象ならTickで描き直し、静止した図形ならBeginPlayから秒数を指定して残します。
範囲が見えたら、ログと合わせて「ここまでは合っている」と確認できる部分を増やします。さらに時間をさかのぼって調べたいときは、Visual Loggerへ必要な情報を記録しておくと役立ちます。