카테고리 없음

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

밝음의기둥 2024. 12. 16. 07:59
반응형

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


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

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


질문 >

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

답변 >

멀티 스윕 트레이스(Multi Sweep Trace)는 언리얼 엔진에서 제공하는 충돌 검사 방법으로, 형상(Shape)을 따라 경로를 스윕하면서 충돌하는 모든 오브젝트를 감지합니다. 이는 스윕 트레이스(Sweep Trace)의 확장으로, 한 번의 실행으로 경로상의 여러 대상과의 충돌 정보를 반환합니다.


멀티 스윕 트레이스의 주요 특징

  1. 형상을 사용한 충돌 감지:
    • 구(Sphere), 박스(Box), 캡슐(Capsule) 등 다양한 형상을 사용하여 충돌 검사.
  2. 다중 충돌 감지:
    • 경로 상에서 충돌하는 모든 오브젝트의 정보를 반환합니다.
  3. 결과 반환:
    • 충돌한 오브젝트, 충돌 지점, 표면의 법선 벡터 등 상세한 정보를 FHitResult 배열 형태로 반환.
  4. 필터링:
    • 특정 Collision Channel을 설정하여 필터링된 충돌 대상만 검사 가능.
  5. 유연성:
    • 다양한 게임플레이 상황에서 동시에 여러 오브젝트와 상호작용하는 기능 구현에 적합.

멀티 스윕 트레이스 활용 방법

1. C++로 멀티 스윕 트레이스 구현

캡슐 스윕 트레이스 예제:

void AMyCharacter::PerformMultiSweep()
{
    FVector Start = GetActorLocation(); // 스윕 시작점
    FVector End = Start + (GetActorForwardVector() * 500.0f); // 스윕 끝점

    float CapsuleRadius = 50.0f;
    float CapsuleHalfHeight = 100.0f;

    // 충돌 결과를 저장할 배열
    TArray<FHitResult> HitResults;
    FCollisionShape CapsuleShape = FCollisionShape::MakeCapsule(CapsuleRadius, CapsuleHalfHeight);

    // 캡슐 멀티 스윕 실행
    bool bHit = GetWorld()->SweepMultiByChannel(
        HitResults,
        Start,
        End,
        FQuat::Identity,  // 회전 없음
        ECC_Visibility,   // 충돌 채널
        CapsuleShape
    );

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


2. 블루프린트에서 멀티 스윕 트레이스 구현

Sphere Sweep Multi

  1. 노드 추가:
    • SphereTraceMultiByChannel 또는 BoxTraceMultiByChannel 노드를 사용.
  2. 파라미터 설정:
    • Start: 스윕 시작점.
    • End: 스윕 끝점.
    • Radius(Sphere), Extent(Box): 충돌 형상의 크기.
    • Trace Channel: 충돌 검사 대상 채널.
  3. 출력 핀 처리:
    • Out Hits: 충돌 정보를 배열로 반환.
    • 각 결과를 반복 처리(For Each Loop)하여 충돌한 오브젝트와의 상호작용 구현.

트레이스 형상 종류

  1. Box (박스):
    • 직육면체 형태로 충돌 감지.
    • 사용 함수: FCollisionShape::MakeBox(FVector HalfExtents).
  2. Sphere (구):
    • 구형으로 충돌 감지.
    • 사용 함수: FCollisionShape::MakeSphere(float Radius).
  3. Capsule (캡슐):
    • 캡슐 형태로 충돌 감지(주로 캐릭터와의 충돌 감지에 적합).
    • 사용 함수: FCollisionShape::MakeCapsule(float Radius, float HalfHeight).

멀티 스윕 트레이스 활용 예시

1. 상호작용 가능한 오브젝트 감지

  • 플레이어 주변에서 스윕 트레이스를 실행해, 모든 상호작용 가능한 오브젝트를 감지.
  • 결과를 기반으로 특정 UI를 표시하거나 상호작용 이벤트를 트리거.

2. 적의 공격 범위 계산

  • 적의 공격 시 캡슐 트레이스를 사용하여 범위 내 모든 플레이어와 NPC를 감지하고 대미지 적용.

3. 환경 분석

  • 게임 환경 내의 물리적 오브젝트와의 충돌 정보를 수집.
  • 예: 플레이어가 특정 범위 내에서 장애물이나 아이템을 감지.

4. 물리 기반 스캐닝

  • Sphere Sweep Multi를 사용해 충돌 지점에 시각적 효과(예: 하이라이트)를 생성.

싱글 스윕 vs 멀티 스윕

특징  싱글 스윕 트레이스  멀티 스윕 트레이스
감지 대상 첫 번째 충돌만 반환 경로 상 모든 충돌 반환
반환 값 단일 FHitResult FHitResult 배열
성능 상대적으로 효율적 충돌 대상이 많으면 성능 저하 가능
사용 사례 단일 대상과의 상호작용 복수 대상과의 상호작용

디버그 시각화

디버깅 시 스윕 트레이스 경로를 시각적으로 확인하면 구현 과정을 더 쉽게 분석할 수 있습니다.

디버그 코드:

#include "DrawDebugHelpers.h"DrawDebugCapsule(
    GetWorld(),
    Start,
    CapsuleHalfHeight,
    CapsuleRadius,
    FQuat::Identity,
    FColor::Red,
    false,
    1.0f
);


장점과 단점

장점

  1. 다중 대상 감지: 경로 상의 모든 충돌 정보를 반환하여 복잡한 상호작용 구현 가능.
  2. 정확성: 부피를 사용해 더 정확한 충돌 검사를 제공.
  3. 다양한 형상 지원: 다양한 형상(Box, Sphere, Capsule)으로 요구 사항에 맞는 검사 가능.

단점

  1. 성능 비용: 충돌 대상이 많아지면 성능 저하 가능.
  2. 복잡성 증가: 반환된 배열 데이터를 관리하는 추가 로직 필요.

결론

멀티 스윕 트레이스는 단일 트레이스보다 더 강력하고 복잡한 충돌 감지를 제공하여, 다중 오브젝트와 상호작용하거나 광범위한 환경 스캐닝을 구현하는 데 매우 유용합니다. 이를 통해 플레이어의 주변 환경 상호작용, 적의 범위 공격, 복합 물리 효과 등을 효율적으로 설계할 수 있습니다. 적절한 형상과 필터링을 통해 성능 최적화도 중요합니다.


🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌 1인 게

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

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

chzzk.naver.com


반응형