UE4で壁や衝突時の情報を得るための方法にレイキャストもとい、ライントレースというものがあります。
これはラインを飛ばした方向の先にあるアクターやオブジェクトの詳細情報を知ることができます。
ブループリントから使用する場合には"LineTrace"系のノードを使用します。LineTraceはシングルとマルチの2パターンとさらにチャンネル指定とオブジェクト指定のものがあります。順番に解説していきます。
シングルとマルチトレース、チャンネルとオブジェクト
トレースにはシングルとマルチがありますが、これらの違いは一本のラインから取得できる情報がひとつか複数かの違いです。シングルの場合は最初にヒットしたアクターのみです。対してマルチはラインを飛ばした線上に存在する全てのアクターの情報を取得することができるのです。
そしてもうひとつの情報としてどのアクターを対象にするのか?という情報です。これに対して指定できるのがチャンネルとオブジェクトです。これらの設定は"プロジェクト設定"内のコリジョンから設定ができます。
チャンネルはコリジョンとは別の設定です。つまり、対象は動かないStaticMeshだけど、特殊チャンネルの情報として扱いたいという場合にはチャンネルを指定します。
逆にオブジェクトの場合は単純で、一切可動しない固定のStaticMeshの場合は"WorldStatic"を指定するとそれで対象扱いとなります。これらを組み合せることであらゆるアクターのトレース情報が取得できるようになります。
これらの設定は"プロジェクト設定"のコリジョンの中から自由にカスタムできますので、必要に応じて追加していきます。
ブループリントを使って情報を取得してみる
実際にブループリントを使ってライントレースしてみます。
イベントTickで毎回呼び出しを行います。
与えてあげる引数にはトレースの開始位置と、どの位置に対してまでトレースを行うかの2点の情報を与えてあげます。"Draw Debug Type"では"For One Frame"を指定してあげると、実際にデバッグ情報として赤いラインが表示されます。
今回はキャラクターのアクター自身の位置から前方ベクトル(Forward Vector)を取得してかけ算して、長さを伸ばした位置に対して飛ばしてみます。
実際に飛ばしてみるとこんな感じに。これはシングルラインなので最初にヒットした情報のみしか取得しません。
取得した情報を表示してみる
次はヒットしたアクターの情報を取得して表示させてみましょう。実際に以下のようなノードを組んでみます。
"Return Value"の値で実際にヒットしたのか?という情報を取得できるので、ヒットした場合にのみ情報を表示させます。"Out Hit"にはヒット時の情報が格納されているので、"Break Hit Result"で情報を分解します。
今回はLocation(ヒットした位置)を取得して表示させてみます。
ヒット位置がとれました!もちろんこの他にも様々な情報がとれますので、トレースした情報から様々なことができます。銃の弾が当たった位置にエフェクトを表示させたりや銃弾の痕をつけるなどといった事ができます。
実は他にも…
最後におまけですが、実はライン以外でも情報がとれます。それはBoxだったり、Capsuleだったり、Sphereだったり…
こっちも使ってみると面白いかもしれません。