본문 바로가기
프로그래밍

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

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

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


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

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


질문 >

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

답변 >

**멀티 라인 트레이스(Multi Line Trace)**는 언리얼 엔진에서 사용되는 충돌 감지 기능으로, **라인 트레이스(Line Trace)**의 확장 버전입니다. 일반적인 라인 트레이스가 경로에서 첫 번째 충돌 지점만 반환하는 반면, 멀티 라인 트레이스는 경로 상의 모든 충돌 지점을 반환합니다. 이를 통해 복잡한 환경에서 여러 오브젝트와 상호작용을 동시에 감지하거나 다양한 충돌 정보를 수집할 수 있습니다.


멀티 라인 트레이스의 주요 특징

  1. 여러 충돌 감지:
    • 라인 트레이스 경로 상에서 충돌하는 모든 오브젝트를 감지합니다.
  2. 충돌 정보 반환:
    • 충돌한 각 오브젝트의 정보를 개별적으로 반환(FHitResult 배열 형식).
  3. 필터링 지원:
    • 특정 충돌 채널(Collision Channel)이나 충돌 유형에 따라 감지할 오브젝트를 필터링 가능.
  4. 다양한 활용 가능:
    • 복잡한 물리적 환경 분석, 여러 대상과의 상호작용, 또는 레이저 스캐닝 효과 구현에 유용.

멀티 라인 트레이스의 활용 방법

1. C++ 코드 구현

멀티 라인 트레이스는 GetWorld()->LineTraceMultiByChannel 함수를 사용하여 구현됩니다.

예제 코드:

void AMyCharacter::PerformMultiLineTrace()
{
    FVector Start = GetActorLocation(); // 트레이스 시작점
    FVector End = Start + (GetActorForwardVector() * 1000.0f); // 트레이스 끝점

    TArray<FHitResult> HitResults; // 충돌 결과를 저장할 배열
    FCollisionQueryParams CollisionParams;

    // 멀티 라인 트레이스 실행
    bool bHit = GetWorld()->LineTraceMultiByChannel(
        HitResults,
        Start,
        End,
        ECC_Visibility, // 충돌 채널 설정
        CollisionParams
    );

    if (bHit)
    {
        for (const FHitResult& Hit : HitResults)
        {
            UE_LOG(LogTemp, Warning, TEXT("Hit Actor: %s"), *Hit.Actor->GetName());
        }
    }
}


2. 블루프린트 구현

멀티 라인 트레이스는 블루프린트에서도 쉽게 구현할 수 있습니다.

  1. Line Trace Multi by Channel 노드 추가:
    • 블루프린트에서 LineTraceMultiByChannel 노드를 배치.
  2. 시작점과 끝점 설정:
    • 캐릭터의 위치와 방향에 따라 StartEnd를 설정.
  3. 출력 처리:
    • Out Hits 핀을 사용하여 충돌 정보를 배열로 반환.
    • 반환된 충돌 정보에서 Hit Actor, Impact Point 등을 분석.

멀티 라인 트레이스 활용 예시

1. 레이저 스캐닝

  • 환경 내에서 레이저가 여러 오브젝트를 스캔하여 충돌 정보를 수집.
  • 충돌 지점에 시각적인 효과(예: 데칼, 파티클)를 생성.

2. 총알 발사

  • 산탄총처럼 여러 탄환을 동시에 발사하는 무기의 충돌 구현.
  • 충돌한 각 대상에 대미지를 적용하거나 상태를 변경.

3. 물리적 환경 상호작용

  • 복잡한 물리적 환경에서 오브젝트와의 충돌을 감지하고 처리.
  • 예: 여러 상자를 동시에 밀거나 상호작용.

4. 복합 상호작용

  • 캐릭터가 여러 아이템을 동시에 집거나 인식.
  • 예: 플레이어가 주변의 모든 상호작용 가능한 오브젝트를 감지.

멀티 라인 트레이스와 싱글 라인 트레이스 비교  

특징 싱글 라인 트레이스 멀티 라인 트레이스
감지 방식 첫 번째 충돌 지점만 반환 경로 상 모든 충돌 지점 반환
반환 데이터 단일 FHitResult FHitResult 배열
성능 상대적으로 성능이 우수 충돌 대상이 많아질수록 성능 저하 가능
사용 사례 단일 대상과의 상호작용 복수 대상과의 상호작용

디버그 시각화

라인 트레이스를 디버깅하려면 DrawDebugLine 또는 **DrawDebugHelpers**를 사용하여 트레이스 경로를 시각화할 수 있습니다.

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


장점과 단점

장점

  1. 여러 충돌 감지: 경로 상의 모든 충돌 대상을 한 번에 감지 가능.
  2. 복잡한 상호작용 구현: 다수의 오브젝트와 동시 상호작용 처리에 적합.
  3. 세부적인 충돌 정보 제공: 각 충돌 지점의 세부 정보를 개별적으로 제공.

단점

  1. 성능 비용: 충돌 대상이 많을수록 성능 부담이 증가.
  2. 복잡성 증가: 반환된 데이터 배열을 관리하고 처리하는 로직이 복잡할 수 있음.

결론

멀티 라인 트레이스는 경로 상의 여러 충돌 대상을 감지하고, 각각에 대한 정보를 처리해야 할 때 매우 유용합니다. 이를 통해 총알 발사, 환경 스캐닝, 다중 상호작용과 같은 복잡한 기능을 효율적으로 구현할 수 있습니다. 다만, 충돌 대상이 많아질 경우 성능 부담이 증가할 수 있으므로 최적화를 염두에 두고 사용해야 합니다.


🎬 유튜브 채널 🎬

 

위로그@WiLog

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

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

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

chzzk.naver.com


반응형