2024-04-03
깃허브! |
---|
https://github.com/ChangJin-Lee/ARproject |
★ https://github.com/ChangJin-Lee/ToonTank |
느낀점
GetHitResultUnderCursor로 화면에 보이는 물체에 대한 카메라 커서의 충돌된 위치를 반환하는 방법을 배우게 되었다. 캐릭터의 회전 방향을 정할때 유용하게 쓰인다고한다. CriptRaider때 배웠던 DrawDebugSphere를 또 사용했다. 디버그 구체를 그려서 현재 마우스가어떤 위치에 있는지를 알 수 있다.
월드에 Start라는 FVector 타입의 점이 있고 End라는 FVector 타입의 점이 있다. 두 점을 잇는 직선을 그리는 행위를 Line Trace라고 부른다.
그 직선 사이에 물체가 있다면 Hit Event가 발생하고 이걸 Trace Hit이라고 부른다.
이러한 Trace Hit의 결과는 FHitResult에 담겨지는데 여기에는 Hit Location, Hit Actor가 있다.
이전에 만들어놓은 APlayerController 변수를 사용하면 된다.
// PlayerControllerRef가 유효한지 확인해야한다.
// 포인터는 항상 null 포인터인지 아닌지 확인해야한다.
// ECollisionChannel은 열겨형 타입이다.
// bTraceComplex를 false로 했고
// HitResult에 충돌 결과를 저장했다.
if(PlayerControllerRef)
{
FHitResult HitResult;
PlayerControllerRef->GetHitResultUnderCursor(
ECollisionChannel::ECC_Visibility,
false,
HitResult);
}
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/DrawDebugSphere/
// Called every frame
void ATank::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if(PlayerControllerRef)
{
FHitResult HitResult;
PlayerControllerRef->GetHitResultUnderCursor(
ECollisionChannel::ECC_Visibility,
false,
HitResult);
// DrawDebugSphere(
// GetWorld(),
// GetActorLocation() + FVector(0.0f,0.0f,100.0f),
// 100.f,
// 24,
// FColor::Red,
// false,
// -1);
DrawDebugSphere(
GetWorld(),
HitResult.ImpactPoint,
50.f,
24,
FColor::Red,
false,
-1.f);
}
}