[UE4] Line Trace
UWorld 객체의 LineTraceSingle() 메쏘드를 사용해 얻을 수 있다.
결과는 FHitResult 구조체로 얻을 수 있으며, 해당 구조체에 액터나 거리 위치등 세부 정보가 포함된다.
https://wiki.unrealengine.com/Trace_Functions
static FORCEINLINE bool Trace(
UWorld* World,
AActor* ActorToIgnore,
const FVector& Start,
const FVector& End,
FHitResult& HitOut,
ECollisionChannel CollisionChannel = ECC_Pawn,
bool ReturnPhysMat = false)
{
FCollisionQueryParams TraceParams = FCollisionQueryParams( FName(TEXT("MY_TRACE")), true, ActorToIgnore);
TraceParams.bTraceComplex = true;
TraceParams.bReturnPhysicalMaterial = ReturnPhysMat;
TraceParams.AddIgnoredActor(ActorToIgnore);
HitOut = FHitResult(ForceInit);
World->LineTraceSingle(
HitOut,
Start,
End,
CollisionChannel,
TraceParams
);
return (HitOut.GetActor() != NULL );
}
위와 같은 검사 함수를 만들고 아래처럼 사용하면 된다.
// 시작 위치
const FVector Start = GetFocalLocation();
// 끝위치
const FVector End = Start + GetControlRotation().Vector() * 256;
FHitResult HitData(ForceInit);
if( UMyFunction::Trace( GetWorld(), GetPawn(), Start, End, HitData) )
{
if(HitData.GetActor())
{
}
}
블루프린트 LineTraceByChannel
캐릭터가 바라보고 있는 오브젝트를 알아낼때 필요.
예제 ) Spot Light 색상 바꾸기
A클래스에 Custom Event , 입력값 Linear Color 추가
이벤트가 호출되면 Spot Light 컴포넌트에 Set Light Color 로 색상 변경
캐릭터 클래스
특정 이벤트(키입력, 마우스 입력 등) 발생시 Line Trace
LineTraceByChannel
입력
Start : 캐릭터에 포함된 카메라 콤포넌트 GetWorldLocation
End : 카메라 콤포넌트의 전방 노말벡터 GetForwardVector * float + Start 위치
출력
Return Value 로 branch
Out Hit : Break Hit Result
Break Hit Result
Hit Actor : A클래스로 형변환
형변환 성공하면 커스텀 이벤트 호출