본문 바로가기
프로그래밍

👨‍💻 [Unreal] 언리얼 엔진 에서 라인 트레이스 (Line Trace) 란 무엇이고, 어떻게 활용할 수 있나요?

by 밝음의기둥 2024. 12. 11.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

언리얼 엔진 에서 라인 트레이스 (Line Trace) 란 무엇이고, 어떻게 활용할 수 있는지 간략히 알아보았습니다.


질문 >

언리얼 엔진 에서 라인 트레이스 (Line Trace) 란 무엇이고, 어떻게 활용할 수 있나요?

답변 >

라인 트레이스(Line Trace)는 언리얼 엔진에서 특정 방향으로 직선을 발사하여 충돌을 감지하고, 충돌 지점 및 충돌한 오브젝트에 대한 정보를 반환하는 물리적 검사 기능입니다. 라인 트레이스는 게임에서 매우 유용하며, 주로 총알 발사, 시야 검사, 환경 상호작용과 같은 기능을 구현하는 데 사용됩니다.


라인 트레이스의 주요 특징

  1. 직선 경로 검사:
    • 두 점(시작점과 끝점) 사이의 충돌 가능성을 검사하며, 해당 경로에 있는 오브젝트를 감지.
  2. 충돌 결과 반환:
    • 충돌 여부, 충돌한 오브젝트, 충돌 지점, 충돌 표면의 법선 벡터 등을 반환.
  3. 채널 사용:
    • 특정 Collision Channel(예: WorldStatic, WorldDynamic)을 기반으로 충돌을 필터링.
  4. 싱글 트레이스와 멀티 트레이스:
    • Single Trace: 경로상 첫 번째로 감지된 오브젝트만 반환.
    • Multi Trace: 경로에 감지된 모든 오브젝트를 반환.

라인 트레이스 활용 방법

1. 라인 트레이스를 구현하는 기본 코드

라인 트레이스를 구현하려면 UKismetSystemLibrary::LineTraceSingle 또는 GetWorld()->LineTraceSingleByChannel 함수를 사용합니다.

C++ 예제

void AMyCharacter::PerformLineTrace()
{
    FVector Start = GetActorLocation(); // 시작 지점 (캐릭터 위치)
    FVector ForwardVector = GetActorForwardVector(); // 캐릭터의 정면 방향
    FVector End = Start + (ForwardVector * 1000.0f); // 1000 유닛 앞까지 검사

    FHitResult HitResult;
    FCollisionQueryParams CollisionParams;

    // 라인 트레이스 수행
    bool bHit = GetWorld()->LineTraceSingleByChannel(
        HitResult,
        Start,
        End,
        ECC_Visibility, // 충돌 채널
        CollisionParams
    );

    if (bHit)
    {
        // 충돌한 오브젝트 정보 출력
        UE_LOG(LogTemp, Warning, TEXT("Hit: %s"), *HitResult.Actor->GetName());
    }
}

블루프린트 예제

  1. 노드 추가:
    • LineTraceByChannel 노드를 사용.
    • StartEnd 포인트를 입력.
    • 충돌 채널을 설정(ECC_Visibility, ECC_PhysicsBody 등).
  2. 출력 핀:
    • Hit 핀: 충돌 여부.
    • Hit Actor: 충돌한 오브젝트.
    • Impact Point: 충돌 지점.

2. 라인 트레이스의 주요 설정

  1. 시작점(Start)과 끝점(End):
    • 시작점과 끝점 좌표를 기반으로 라인 트레이스가 수행됩니다.
    • 보통 시작점은 카메라 위치캐릭터 위치에서 시작되며, 끝점은 특정 방향으로 확장된 좌표입니다.
  2. 충돌 채널(Collision Channel):
    • 라인 트레이스가 어떤 종류의 충돌을 감지할지 결정.
    • 주요 채널:
      • ECC_Visibility: 시각적 충돌(렌더링 관련).
      • ECC_PhysicsBody: 물리적 충돌(물리 기반 오브젝트).
      • ECC_WorldStatic: 고정된 환경 오브젝트.
  3. Query Params (쿼리 파라미터):
    • FCollisionQueryParams를 통해 트레이스 조건을 추가 설정.
    • 예: 특정 오브젝트는 무시하거나 디버그용 정보를 표시.

3. 디버그 시각화

라인 트레이스를 디버깅하기 위해 DrawDebugLine 또는 DrawDebugHelpers를 사용해 트레이스 경로를 시각적으로 확인할 수 있습니다.

#include "DrawDebugHelpers.h"DrawDebugLine(
    GetWorld(),
    Start,
    End,
    FColor::Green,
    false,
    1.0f,
    0,
    1.0f
);


라인 트레이스의 활용 예시

  1. 총알 발사:
    • 라인 트레이스를 사용하여 총구에서 발사된 총알이 무엇과 충돌했는지 감지.
    • 충돌 지점에 데칼(총알 자국) 추가 또는 적의 체력 감소 처리.
  2. 환경 상호작용:
    • 플레이어가 문, 버튼, 또는 아이템과 상호작용할 때 사용.
    • 캐릭터의 시선 방향으로 라인 트레이스를 발사하여 상호작용 가능한 오브젝트를 탐지.
  3. 시야 검사:
    • AI 캐릭터가 플레이어를 감지할 수 있는지 확인.
    • AI의 시야각 내에서 라인 트레이스를 발사해 장애물 없이 플레이어가 보이는지 판단.
  4. 물리 시뮬레이션:
    • 라인 트레이스로 감지된 물리적 오브젝트를 밀거나 잡는 등의 상호작용 구현.
  5. 레이저 이펙트:
    • 라인 트레이스를 기반으로 레이저와 같은 시각적 효과를 구현.

라인 트레이스의 장단점

장점

  • 빠르고 간단함: 특정 경로에서 충돌을 감지하는 데 효과적.
  • 광범위한 활용성: 총알 발사, 시야 검사, 상호작용 등 다양한 상황에 사용 가능.
  • 높은 커스터마이징 가능: 채널, 필터링, 디버깅 시각화 등 설정 가능.

단점

  • 복잡한 상호작용 제한: 여러 충돌 지점을 다루기 위해 멀티 트레이스 사용 필요.
  • 3D 볼륨 제한: 구체적이고 세밀한 충돌 검사를 위해 BoxTrace, SphereTrace 같은 방법 필요.

결론

라인 트레이스는 언리얼 엔진에서 충돌 감지와 환경 상호작용을 구현하는 데 매우 유용한 도구입니다. 게임에서 빠르고 간단한 충돌 검사가 필요할 때 사용하며, 디버깅 및 시각화 기능을 통해 개발 과정을 더 쉽게 만들 수 있습니다. 상호작용, 공격, 물리 효과 등 다양한 게임플레이 메커니즘에 활용 가능합니다.


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기주도학습을 목적으로 라이브 스트리밍을 합니다. 📢 1인 게임 개발을 목표로 Unreal과 Blender를 학습 중입니

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형