【Unreal Engine】UE5のLine Trace入門:見えない線で「そこに何があるか」を調べる

作成: 2026-07-20最終更新: 2026-09-05

Line Traceで目の前の箱を調べる入門記事。始点・終点の作り方、探す相手と遮蔽物の違い、ヒット結果の取り出し方を図解し、Rキーで箱の名前を表示します。

目の前のドアを調べたい。銃を撃って当たった相手を知りたい。足元に床があるか確かめたい。こうした場面では、ある地点から線を伸ばし、その先に何があるかを調べる 処理が役立ちます。

UE5では Line Trace、ほかのエンジンではレイキャスト(Raycast)と呼ばれる機能です。まずは「どこから、どこまで、何を調べるか」を押さえましょう。実践ではRキーを押し、キャラクターの前方にある箱の名前を画面へ出します。

手前の箱が線を遮ると、その箱が結果として返る

この記事でわかること

  • 線の始点と終点を、位置・向き・距離から作る方法
  • チャンネルで調べる場合と、相手の種類で絞る場合の違い
  • 当たった相手・場所・面の向きを取り出す方法
  • Rキーで箱を調べ、距離や当たり判定を変えて比較する手順

Sponsored

Line Traceは「その線上に何があるか」の問い合わせ

Line Traceは、レベル内の2点を結ぶ線に沿って当たり判定を調べます。線そのものが弾として飛んだり、箱を押したりするわけではありません。 呼び出した時点の結果を受け取り、その後の処理に使います。

今回使うLine Trace By Channelは、線を遮る最初の相手を1つ返します。たとえば箱が2個並んでいても、手前の箱が線を遮れば、奥の箱は結果に入りません。

中心になる入力は、次の3つです。

入力決めること
Startどこから調べるか。線の始点
Endどこまで調べるか。線の終点
Trace Channel何の判定として調べるか

位置を表すStartとEndは Vector です。ここでは、レベル内の場所をX・Y・Zの3つの数値で表したもの、と捉えてください。

主な結果も2つに分かれます。

出力意味
Return Value当たったかどうか。true/falseのBoolean
Out Hit当たった相手や場所などをまとめたHit Result

「当たったら処理する」にはReturn Valueを使い、「誰に当たったか」にはOut Hitを使います。両方を別々に取り出すことが、後のBlueprint配線のポイントです。

StartからEndへ引いた線は手前の箱で止まり、Return ValueとOut Hitの2つで結果を受け取る

StartとEnd:向きに距離を掛け、始点へ足す

キャラクターの前方を300cm調べたいとします。必要なのは、現在位置、前を向く方向、調べる距離です。

End = Start + 前方向 × 距離

Get Actor Locationで現在位置、Get Actor Forward Vectorで前方向を取れます。Forward Vectorは長さ1の方向なので、300を掛けると「前方へ300cm進んだ分」になります。それを現在位置へ足せば、線の終点です。

たとえばStartが(100, 0, 100)、前方向が(1, 0, 0)、距離が300なら、Endは(400, 0, 100)です。Endへ方向だけを入れると、現在地の前方ではなく、レベルの原点近くを指してしまいます。

Startへ前方向の300cmを足すとEndになる

UEでは通常、距離の単位はcmです。300は3m、1000は10mになります。まず短い距離で試すと、調べている範囲と画面の結果を結び付けやすくなります。

身体の前方と、カメラの前方は使い分ける

身体の前にあるものを調べるなら、Actorの位置と前方向を使います。画面中央の狙いに沿って調べたいなら、カメラのGet World LocationとGet Forward Vectorを使います。

始点と方向を、どちらも同じ基準から取る のが大切です。今回の実践は身体の前方を調べます。後方に置いたカメラからの距離とは違うので、カメラを基準に変える場合は、調べる距離も見直します。

By ChannelとFor Objects:何を対象にするか

線が見た目のモデルに触れれば、必ず結果が返るわけではありません。対象の当たり判定が検索を許可し、選んだ調べ方の条件に合う必要があります。

主な選び方は2つです。

ノード対象の選び方
Line Trace By Channel指定チャンネルに対する相手の反応を見るVisibilityを遮る壁や箱を調べる
Line Trace For Objects相手のObject Typeを指定するPawnという種類だけを探す

チャンネルは「何のための判定か」、Object Typeは「相手がどの種類か」 を表します。詳しい設定方法はコリジョンチャンネルの記事で扱っています。

By Channel:その判定を遮る相手を調べる

Visibilityを指定した場合、各相手の「Visibilityへの反応」を見ます。Blockは線を遮る反応、Ignoreは無視、Overlapは通り抜ける接触として扱う反応です。

今回のように結果を1つ返す方式をSingleと呼びます。SingleのLine Trace By Channelでは、Blockになっている最初の相手 が返ります。Ignoreの相手は無視し、Overlapの相手もこのSingleの結果には入りません。

Visibilityという名前でも、画面に映るものを画像として認識する機能ではありません。相手のコリジョン設定に従います。

For Objects:指定した種類に絞る

Object TypesへPawnを指定すると、Pawnの当たり判定が対象になります。Pawnには敵AIだけでなく、プレイヤーキャラクターも含まれます。「敵だけ」という意味ではありません。

WorldStaticは、動かない地形などに使う種類です。WorldStaticの壁はPawnではないため対象外となり、壁の向こうのPawnが見つかる場合もあります。 種類で絞る検索と、壁に遮られて見えないことの判定は、分けて考えましょう。

どちらの方式でも、相手のCollision EnabledがQuery OnlyやQuery and Physicsなど、Query(位置や当たり判定を調べる検索)を許可する設定 である必要があります。Physics OnlyやNo Collisionの相手は、この検索の対象になりません。

VisibilityのBlockで壁に当たる検索と、Pawnだけを調べる検索の比較

Hit Result:当たった結果を取り出す

Hit Resultは、1回のヒットに関する情報をひとまとめにしたデータです。こうしたデータのまとまりを構造体と呼びます。

Out HitからBreak Hit Resultを作ると、中の情報を取り出せます。Breakは「壊す」という処理ではなく、まとめてある項目を個別の出力へ分けるノードです。

出力分かること使う場面
Hit Actor当たったActor箱を開ける、敵へダメージを渡す
Impact Point表面に当たった位置火花や弾痕を出す
Impact Normal当たった面から外側へ向く、垂直な方向面の向きに合わせて効果を置く
Distance始点からヒット位置までの距離手が届く距離かを見る

Normalは「面の向き」を表す矢印です。平らな壁へ正面から線を伸ばした場合、Impact Normalは壁からこちら側へ向きます。線の進む方向と同じとは限りません。

当たったActor・表面の点・面の外向き・始点からの距離

表のDistanceはLine Traceで考えた説明です。後で出てくるSphere Traceでは、球の中心が止まる位置(Location)と、表面に触れた位置(Impact Point)が分かれます。DistanceはStartからLocationまでなので、形を持つ検索へ変えるときは区別します。

Hit Bone Nameという項目もありますが、骨のあるSkeletal Meshへ当たった場合の情報です。キャラクターの手前のCapsuleへ当たっただけでは、頭の骨名は取れません。

Sponsored

Draw Debug Typeで線の場所を確かめる

線の計算が合っているかは、実際にどこを調べたか見えるようにする と確認できます。Line TraceノードのDraw Debug Typeを変えてみましょう。

設定表示
None線を表示しない
For One Frame1フレームだけ表示する
For DurationDraw Timeで指定した秒数だけ表示する
Persistent確認用の線を残す。連続実行すると線がたまる

キーを押したときだけ調べる今回の練習では、For Durationが見やすい設定です。ノード下部の詳細ピンを展開すると、Draw Timeや色を指定できます。

標準の赤・緑の色では、ヒットした点までが赤、その先のEndまでが緑で描かれます。緑の区間は、奥のものも結果へ入ったという意味ではありません。結果として返る相手は、最初のBlockです。

ヒットしない場合は全体が赤になります。ただしEndのすぐ近くに当たると緑の区間は短いため、色だけで決めず、命中位置の印やReturn Valueも見ます。

標準色のデバッグ線で、ヒットした場合と外れた場合を比較する

線がまったく見えなければ、まずイベントが動いているか、Draw Debug TypeがNoneでないかを確認します。線がカメラの外にある、表示時間が過ぎた、StartとEndが同じ、という場合もあります。

実践:Rキーで前方の箱を調べる

Enhanced Input入門で作った、白い直方体のBP_InputPracticeを使います。同じGameModeとPlayerStartでPlayでき、WASD移動が動くところから始めます。

今回は身体の前方を調べます。この練習用キャラクターは向きを固定しているため、AやDで横へ動いても、調べる向きはレベルの+X方向のままです。マウスで狙う機能は、この練習の後にカメラ基準へ変える際に扱えます。

Rで白い身体の前を300cm調べると、手前のCube_Aが見つかる

1. 前方へ2個の箱を並べる

平らな床の上面をZ=0とし、PlayerStartをLocation=(0, 0, 100)、Rotation=(0, 0, 0)へ置きます。キャラクターはGameModeから出すため、BP_InputPracticeを追加で手配置しません。

標準のCubeを2個置き、アウトライナで名前をCube_A、Cube_Bにします。

ActorLocationScale
Cube_A(250, 0, 100)(1, 1, 2)
Cube_B(450, 0, 100)(1, 1, 2)

Rotationは両方とも(0, 0, 0)、Simulate Physicsはオフにします。Collision PresetsをBlockAllにし、Query and Physics、Object Type=WorldStatic、Visibility=Blockであることを確認します。

箱は高さ200cmなので、身体の中央から前へ伸ばす線が通ります。床は線より下にあるため、水平に調べれば手前の床へ当たらずに試せます。

2. Rキーの入力と距離の変数を用意する

InputPracticeフォルダへInput ActionのIA_TraceInspectを作ります。Value TypeはDigital (Bool)、ModifiersとTriggersは空のままです。

既存のIMC_PlayerControlsのMappingsへIA_TraceInspectを追加し、Rを割り当てます。通常移動のIMCが有効な状態で使い、練習中はFキーで操作モードを切り替えません。

BP_InputPracticeへ、小数を扱えるFloat型の変数InteractDistanceを作り、コンパイルして初期値を300にします。これは身体の中心から調べる距離です。

イベントグラフへIA_TraceInspectのイベントとLine Trace By Channelを置き、Startedから白い実行線をつなぎます。Rを押し始めたとき、1回だけ調べる構成です。

3. 線の始点と終点をつなぐ

BP_InputPracticeのグラフに、次の計算を作ります。Get Actor LocationとGet Actor Forward VectorのTargetはselfです。

  1. Get Actor LocationのReturn ValueをLine TraceのStartへつなぐ。
  2. Get Actor Forward VectorのReturn ValueからMultiplyを作り、もう一方へGet InteractDistanceをつなぐ。
  3. Multiplyの結果からAddを作り、もう一方へGet Actor LocationのReturn Valueをつなぐ。
  4. Addの結果をLine TraceのEndへつなぐ。

Multiplyは「VectorにFloatを掛ける」、Addは「Vector同士を足す」形です。型が合わない場合は、方向のVector出力から線を引いて検索し直します。

Forward VectorとInteractDistanceをMultiplyへつなぐ

続いて現在位置を足します。Get Actor Locationの同じ出力を、StartとAddの両方へつなぎます。Addの結果はEndへ渡します。

現在位置をStartとAddへ分け、Addの結果をEndへつなぐ

Line Traceの設定は次のようにします。

入力
Trace ChannelVisibility
Trace Complexオフ
Ignore Selfオン
Actors to Ignore未接続
Draw Debug TypeFor Duration
Draw Time2

Ignore Selfで、処理しているBP_InputPractice自身を除きます。ほかのActorを除外したい場合に、Actors to IgnoreへMake Arrayで一覧を渡します。たとえば別Actorとして持っている武器は、必要に応じてその一覧へ加えます。

4. 当たった場合と、外れた場合を分ける

Line Traceの白い実行出力からBranchへつなぎ、Return ValueをBranchのConditionへつなぎます。

白い線は処理の順番、赤いBooleanの線は「当たったか」の値です。Return Valueから白い実行線を出すわけではありません。

BranchのTrue側とFalse側へ、それぞれPrint Stringを1つ置きます。両方ともDurationは2にし、False側のIn Stringには「なし」と入力します。

StartedからTrace、Branchへ実行線を通し、Return ValueをConditionへつなぐ

5. 当たったActorの名前を取り出す

True側へ表示する文字を、次の順に作ります。

  1. Line TraceのOut HitからBreak Hit Resultを作る。
  2. Hit ActorからGet Display Nameを作り、Objectへつなぐ。
  3. Get Display NameのReturn Valueを、True側のPrint StringのIn Stringへつなぐ。

Break Hit ResultとGet Display Nameには、白い実行ピンがありません。必要な情報を取り出すノードなので、色付きのデータ線でつなぎます。 実行の順番は、先ほどのLine Trace → Branch → Print Stringのままです。

Out HitからHit Actorを取り出し、表示名をTrue側Print Stringへ渡す

Get Display Nameは、確認用の名前を返します。エディタでのPlayではアウトライナのCube_Aなどの名前を確認できますが、エディタ以外では内部のオブジェクト名になります。ゲーム内で敵を識別するIDや、プレイヤー向けの表示名には使いません。

6. 距離と反応を変えて、結果を比べる

コンパイル・保存してPlayし、画面をクリックします。開始位置で動かずにRを押すと、手前のCube_Aが表示されるか確認します。

続いてPlayを止め、次の順で変えて試します。毎回、開始位置から調べます。

変更確認する結果理由
InteractDistance=100なし手前の箱まで線が届かない
InteractDistance=600Cube_A奥まで届く長さでも、手前のBlockが返る
600のまま、Cube_AのVisibilityだけIgnoreCube_B手前の箱を、この線の判定では無視する

Cube_Aの反応を変えるときは、レベル上のCube_Aを選び、詳細のCollision PresetsをCustomにしてVisibilityだけIgnoreへ変えます。PawnへのBlockなど、ほかの反応はそのままです。キャラクターが歩くと箱で止まっても、Visibilityの線だけは通る、という違いを試せます。

確認後はCube_AをBlockAll、InteractDistanceを300へ戻します。次はPlay中にAやDで箱の横へずれ、Rを押して「なし」になるか見ます。画面に箱が映っていても、身体の前から伸びる線が箱を通らなければヒットしません。

Sponsored

MultiとSphere:複数を拾う・幅を持たせる

基本の1本で調べられるようになったら、「複数の相手が欲しい」「細い線では狙いづらい」という場面へ広げられます。この2つでは、変えるものが違います。

Multi Traceは、結果を複数受け取る

Multiは、ヒット結果をOut Hitsという 配列(複数の値を並べた一覧) で返します。ただし、Multiに変えれば必ず壁を貫通するわけではありません。

ノード集める結果
Multi Line Trace By Channel途中のOverlapと、最初のBlockまで
Multi Line Trace For Objects指定したObject Typeとのヒット

By Channelでは、最初のBlockより先は調べません。途中の草をOverlap、壁をBlockにすれば、草と壁までをまとめて受け取れます。

また、Multi Line Trace By ChannelのReturn Valueは、Blockに当たったかどうかです。OverlapだけならfalseでもOut Hitsに結果が入ります。「falseだから一覧も空」と判断しないようにします。

図のWorldDynamicは、動かせる物などに使う種類です。球と奥の箱をこの種類にすると、その2つを検索対象にできます。

For Objectsは種類で集めるため、選ばなかった種類の壁は検索を遮りません。複数の相手を拾いたいのか、遮蔽物も考えたいのかを決めて選びます。

チャンネル検索は最初のBlockまで、種類検索は指定した種類のヒットを集める

Sphere Traceは、球の幅で調べる

Sphere Trace By Channelは、StartからEndへ球を動かした範囲で、最初のBlockを調べます。これは検索に使う形で、物理的な球を出現させる処理ではありません。

Radiusは半径、つまり球の中心から外側までの距離です。狙いが少しずれても拾いたいときなどに、細いLine Traceより幅を持たせられます。

細い線が外れる位置の箱にも、球の幅なら届く

今回の箱で比較するなら、次のように試せます。

  1. InteractDistanceは300、Cube_AのVisibilityはBlockへ戻す。
  2. Cube_AのLocationのYだけ70へ変える。X=250、Z=100はそのまま。
  3. 開始位置からLine Traceで調べる。線が箱の横を通り、「なし」になるか確認する。
  4. Line Trace By ChannelをSphere Trace By Channelへ置き換える。同じStart・End・実行線・出力先をつなぎ、Radiusを30にする。
  5. Visibility、Trace Complexオフ、Ignore Selfオン、For Duration、Draw Time=2をそろえて、再びRで調べる。

箱の幅は100cmなので、Y=70へ置くと近い面はY=20です。Y=0を通る細い線は外れますが、半径30の球なら面まで届く、という比較です。Cube_Bは距離300より先にあるため、この確認では対象になりません。

球では、中心が進んだ位置と箱の表面に触れた点がずれます。効果を表面へ置くならImpact Pointを使う理由も、ここで見えてきます。

うまく当たらないときのチェック

症状確認するところ
Rを押しても何も出ないIA_TraceInspectの割当、IMCの有効化、Play画面への入力、Startedからの白い線
線が見えないFor DurationとDraw Time、線が視点の外にないか、StartとEndが同じでないか
線の向きや長さがおかしいEndが「Start+方向×距離」になっているか
線が箱を通るのに当たらない箱のQueryが有効か、VisibilityがBlockか、当たり判定の形があるか
自分や武器を拾うIgnore Selfがオンか。別Actorの武器ならActors to Ignoreへ入れたか
名前の表示へつなげないOut Hit → Break Hit Result → Hit Actor → Get Display Nameの順か
画面に映る箱を拾わない今回は身体の前方を調べる。カメラの視線と混同していないか

当たり判定の形も確認しましょう。Trace Complexは、簡略化した形と細かい形のどちらで調べるかの指定ですが、実際に使う形はメッシュ側のCollision Complexity設定にも関わります。SimpleとComplexの基礎の手順で、見た目と判定を見比べられます。

実行頻度は、欲しい結果に合わせます。ボタンを押して調べるなら今回のStartedで十分です。照準が合った相手を常に光らせるなど、毎フレーム更新したい用途ではTickも選択肢になります。多数の相手を調べる場合は、範囲や頻度を決めて負荷を確認します。

線と名前の確認が済んだら、Draw Debug TypeをNoneにし、確認用のPrint Stringを外します。デバッグ用の線を見せることと、ゲーム内で弾や照準を描くことは別の処理です。

おまけ:先に知っておくと良いこと

  • 当たらない原因の多くはチャンネル: 撃つ側のTrace Channelと、当てたい相手のCollision Responseが噛み合っていないと当たりません。まず Visibility / Camera / 自作チャンネルのどれで判定するかを決めます
  • Complexは万能ではない: Trace Complexを有効にすると細かい形状に当たりますが、意図しない面に当たることもあります。弾の判定はまずSimpleで試し、必要なときだけComplexにします
  • 細い相手には太い線を: 1本の線では細い対象を外しがちです。Sphere TraceやCapsule Traceにすると、ゲームとして自然な当たり方になります
  • デバッグ描画を消し忘れない: 確認用のDraw Debug Typeは、仕上げのときに None へ戻します

まとめ

Line Traceは、始点から終点までの線を使って、そこに何があるかを調べます。まず線の位置を見えるようにし、次に対象の種類やチャンネルへの反応を確かめると、結果の理由を追えます。

今回の練習では、距離を短くすると届かず、長くしても手前の箱で止まり、その箱のVisibilityをIgnoreにすると奥の箱が返ります。同じ2個の箱でも、設定によって「調べられる相手」が変わることを試してみてください。

Hit Actorを取り出せれば、名前を表示する先に、扉を開ける・アイテムを拾う・ダメージを渡す処理をつなげられます。相手ごとに同じ呼び方で処理を頼む方法は、Blueprint Interface入門で扱っています。

参考:Line Trace By ChannelLine Trace For ObjectsBreak Hit ResultGet Display NameMulti Line Trace By ChannelSphere Trace By Channel

Unreal Engine このセクションのノート98