【UnrealEngine】C++でLineTraceを飛ばしてみよう!
画像のように今回はLineTraceをプレイヤーキャラクターから真っすぐ飛ばしてみたいと思います。

まずはC++のフォルダ直下にあるプロジェクト名と同じ名前のフォルダにプレイヤーキャラクターがあるのでこちらを開きましょう。

まずはソースファイルにトレース用の関数を作成していきます。
◆コード
UFUNCTION(BlueprintCallable)
virtual void DoTrace();

作成できたらソースファイルに移動。
さっき作成したDoTrace関数の中の処理をここでは記述していく。あなたがコードを書いているときにはおそらく一番下に「 }」←これがあるよ。
AStudyProjectCharacter→A+プロジェクト名+Character.h
void AStudyProjectCharacter::DoTrace()
{
FVector Start = GetActorLocation();
FVector End = Start + GetActorForwardVector() * 10000.f;
FHitResult Hit;
bool bHit = GetWorld()->LineTraceSingleByChannel(
Hit,
Start,
End,
ECC_Visibility
);

これでトレースの処理そのものは記述することができてはいる。しかし、線が可視化されておらず確認しずらいので、飛ばしているラインを見えるようにしよう!
ソースファイルの一番上に移動してコードを追加する。
◆コード
#include “DrawDebugHelpers.h”
これは各種デバッグ系関数を使えるようにするコード。これがないとデバッグ用の関数を記述したところで、そんな関数は存在しないよ!とういエラーになってしまうので忘れずに記述しよう。

ライントレースの関数がある場所に戻り、関数内にコードを追加する。
DrawDebugLine(
GetWorld(),
Start,
End,
FColor::Red,
false,
10.f
);
if (bHit)
{
AActor* HitActor = Hit.GetActor();
if (HitActor)
{
UE_LOG(LogTemp, Warning, TEXT("HitActor"));
}
}

これで線の可視化とデバッグの両方が完了しました。あとはこの関数を呼ぶアクタを作成してゲーム内に配置しておきましょう。
新規C++を作成で作ったアクタを開いてコードを記述します。
◆ソースファイルはこちらのコードを追加
#include “Kismet/GameplayStatics.h”
#include “StudyProjectCharacter.h”(自分のプロジェクト名+Character.h)
AStudyProjectCharacter* Player =
Cast(
UGameplayStatics::GetPlayerCharacter(this, 0)
);
if (Player)
{
Player->DoTrace();
}


コードができたらアクタをワールド内にドラッグ&ドロップしてゲームをプレイしてみるとプレイヤーキャラクターからトレースが飛んでると思うよ!

本日もお疲れさまでした!
それではまたどこかでお会いしましょう!
YouTubeチャンネルもやってます
