책을 상호작용 범위에 두고 카메라로 조준해도 상호작용 UI가 뜨지 않는 문제가 있었음.

원인을 좁히기 위해 DrawDebugLine으로 라인트레이스 경로를 시각화하고, HitResult.GetActor()의 이름을 로그로 찍어서 확인

DrawDebugLine(GetWorld(), Start, End, bHit ? FColor::Green : FColor::Red, false, 0.0f, 0, 1.0f);

if (bHit)
{
    UE_LOG(LogTemp, Warning, TEXT("Traced Actor: %s"), *HitResult.GetActor()->GetName());
}

(라인트레이스 틱함수 밑에 적어야 함 : bool bHit = 
    GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Visibility, QueryParams); )

 

디버그 라인 색은 정상적으로 초록/빨강 토글되고 있어서 라인트레이스 자체는 살아있는 걸 확인함

근데 살펴보니 책장 전체가 초록색으로 뜸 -> 책장 메시 자체가 라인트레이스에 걸려서 Hit 되고 있다는 걸 눈치챔

 

로그를 보니 역시 책이 아니라 책장 자체의 정적 메시(StaticMeshActor)가 먼저 라인트레이스에 잡히고 있던 게 원인이었음

책이 책장 칸 안쪽에 위치해 있어서 카메라에서 책까지 가는 경로 사이에 책장 프레임/칸막이 메시가 끼어 라인트레이스를 가로막고 있었던 것 

 

해결

책장의 Collision Presets를 Custom으로 바꾸고, 콜리전 자체를 No Collision로 꺼서 라인트레이스에서 제외함

이렇게 하면 책장은 더 이상 트레이스에 안 잡히고 책만 상호작용 대상으로 남음.

 

 

배운 점

라인트레이스 기반 상호작용 시스템에서는 카메라와 대상 사이에 끼어있는 모든 정적 메시가 잠재적으로 트레이스를 가로챌 수 있다는 걸 다시 한 번 깨달음

 

서랍장때도 비슷한 문제를 겪었던 걸 생각해보면 상호작용 대상이 아닌 배경/장식 메시는 처음부터 Visibility 채널 콜리전을 꺼두는 게 나중에 비슷한 디버깅을 반복하지 않는 방법

+ Recent posts