게임 개발을 하다 보면 총알이 날아가는 궤적, 시야 판정, 마우스 클릭 위치 판별 등 다양한 상황에서 라인 트레이스(Line Trace)를 사용하게 된다.

하지만 이 라인트레이스가 정확히 어떤 방향으로 얼마만큼 쏴졌는지를 눈으로 확인하기는 어렵다.

이때 유용하게 쓰이는 도구가 바로 DrawDebugLine()이다.

이 글에서는 DrawDebugLine()의 기본 개념부터, 주로 라인트레이스 결과를 시각화하기 위한 용도로 어떻게 활용하는지까지 정리해본다.

DrawDebugLine()이란?

DrawDebugLine()은 언리얼 엔진에서 제공하는 디버그용 함수로, 월드 상에 3D 선을 시각적으로 그려주는 함수이다. 게임 플레이에는 영향을 주지 않으며, 디버깅 목적으로만 사용된다.

특히 라인 트레이스(선형 충돌 검사)와 함께 사용하면 매우 유용하다. 트레이스의 시작점과 끝점, 방향을 시각적으로 확인함으로써 잘못된 판정이나 버그를 빠르게 파악할 수 있기 때문이다.

기본 사용법

DrawDebugLine(
    UWorld* World,
    FVector LineStart,
    FVector LineEnd,
    FColor Color,
    bool bPersistentLines = false,
    float LifeTime = -1.0f,
    uint8 DepthPriority = 0,
    float Thickness = 0.0f
);

주요 매개변수 설명:

  • World: 현재 월드 컨텍스트. GetWorld()로 얻음
  • LineStart, LineEnd: 선의 시작점과 끝점
  • Color: 선의 색상
  • bPersistentLines: true이면 씬이 유지될 동안 계속 남는다
  • LifeTime: 선이 유지되는 시간 (초)
  • Thickness: 선의 두께

라인트레이스와 함께 사용하기

FVector Start = Camera->GetComponentLocation();
FVector End = Start + (Camera->GetForwardVector() * 1000.f);

FHitResult Hit;
FCollisionQueryParams Params;
Params.AddIgnoredActor(this);

bool bHit = GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, Params);

DrawDebugLine(GetWorld(), Start, End, bHit ? FColor::Red : FColor::Green, false, 2.0f, 0, 1.0f);
  • 라인트레이스가 충돌했으면 빨간색, 안 했으면 초록색으로 표시한다.
  • 2초 동안 월드에 선이 보이며, 두께는 1.0이다.
  • 이처럼 디버그 선을 함께 그려주면, 트레이스가 어디를 향하고 있었는지, 왜 맞거나 안 맞았는지를 눈으로 확인할 수 있다.

개발 중 자주 발생하는 문제를 시각적으로 잡아낸다

라인트레이스는 벡터 수치상으로는 맞는 것처럼 보여도, 실제 월드 좌표계에서 살짝 어긋나는 경우가 많다.

DrawDebugLine()을 사용하면 이런 문제를 직접 눈으로 확인하고, 방향 벡터가 잘못되었는지, 레이 범위가 짧은지, 충돌 채널이 잘못 설정되었는지를 빠르게 점검할 수 있다.

다른 디버그 함수들과 함께 쓰다

언리얼은 DrawDebugLine() 외에도 다양한 디버그 시각화 도구를 제공한다:

  • DrawDebugSphere(): 구체로 포인트를 표시
  • DrawDebugBox(): 박스 형태 충돌체 시각화
  • DrawDebugPoint(): 단일 점 찍기
  • DrawDebugDirectionalArrow(): 방향 시각화

이 함수들을 조합하면, 트레이스의 경로, 충돌지점, 방향 벡터 등을 입체적으로 시각화할 수 있다.

마치며

DrawDebugLine()은 단순히 선을 그리는 도구가 아니다.

라인트레이스 결과를 시각화함으로써 디버깅을 훨씬 직관적으로 만들어주는 핵심 도구이다.

특히 FPS, 어드벤처, 클릭 인터랙션 기반의 게임을 개발할 때, 이 기능을 적극적으로 활용하면 개발 속도와 안정성을 크게 향상시킬 수 있다.

눈에 보이지 않는 “충돌 판정”을 눈으로 보이게 만드는 것, 그것이 바로 DrawDebugLine()의 가장 큰 쓸모다.

댓글남기기