본문 바로가기

프로그래밍

언리얼 엔진 5에서의 스윕 테스트 함수들: SweepMultiByObjectType, SweepTestByObjectType

728x90

언리얼 엔진 5 (UE5)에서 충돌 감지와 관련된 다양한 스윕 테스트 함수들이 있습니다. 이번 글에서는 SweepMultiByObjectType, SweepTestByObjectType, 그리고 SweepTestByProfile 함수에 대해 알아보겠습니다.

1. SweepMultiByObjectType

SweepMultiByObjectType 함수는 월드에 대한 스윕 테스트를 수행하여 지정된 객체 유형과의 모든 초기 겹침을 반환합니다. 이 함수는 게임 월드에서 여러 객체와의 충돌이나 겹침을 감지하는 데 특히 유용합니다.

사용 방법

  1. 스윕 형태: 월드를 통해 스윕 할 형태(구, 상자, 캡슐 등)를 정의합니다.
  2. 시작 및 종료 지점: 스윕의 시작 지점과 종료 지점을 지정합니다.
  3. 객체 유형: 겹침을 확인할 객체 유형을 정의합니다.
  4. 결과: 함수는 각 겹침에 대한 자세한 정보를 포함하는 FHitResult 객체 배열을 반환합니다.

예제 코드

TArray<FHitResult> HitResults;
FVector Start = GetActorLocation();
FVector End = Start + FVector(1000, 0, 0); // 1000 유닛 앞으로 스윕
FCollisionShape CollisionShape = FCollisionShape::MakeSphere(50.0f); // 반지름 50의 구

bool bHit = GetWorld()->SweepMultiByObjectType(
    HitResults,
    Start,
    End,
    FQuat::Identity,
    FCollisionObjectQueryParams(ECollisionChannel::ECC_WorldStatic),
    CollisionShape
);

if (bHit)
{
    for (const FHitResult& Hit : HitResults)
    {
        // 각 히트 결과 처리
    }
}

이 예제에서는 반지름 50 유닛의 구가 액터의 위치에서 1000 유닛 앞으로 스윕 되며, 정적 월드 객체와의 겹침을 확인합니다.

2. SweepTestByObjectType

SweepTestByObjectType 함수는 형태가 경로를 따라 이동할 때 지정된 유형의 객체와 충돌하는지 확인하는 스윕 테스트를 수행합니다. 이 함수는 충돌 여부만 확인하고, 모든 히트에 대한 자세한 정보가 필요하지 않을 때 유용합니다.

사용 방법

  1. 스윕 형태: 월드를 통해 스윕할 형태를 정의합니다.
  2. 시작 및 종료 지점: 스윕의 시작 지점과 종료 지점을 지정합니다.
  3. 객체 유형: 겹침을 확인할 객체 유형을 정의합니다.
  4. 결과: 함수는 충돌이 감지되었는지 여부를 나타내는 부울 값을 반환합니다.

예제 코드

FHitResult HitResult;
FVector Start = GetActorLocation();
FVector End = Start + FVector(1000, 0, 0); // 1000 유닛 앞으로 스윕
FCollisionShape CollisionShape = FCollisionShape::MakeSphere(50.0f); // 반지름 50의 구

bool bHit = GetWorld()->SweepTestByObjectType(
    HitResult,
    Start,
    End,
    FQuat::Identity,
    FCollisionObjectQueryParams(ECollisionChannel::ECC_WorldStatic),
    CollisionShape
);

if (bHit)
{
    // 히트 결과 처리
}

이 예제에서는 반지름 50 유닛의 구가 액터의 위치에서 1000 유닛 앞으로 스윕 되며, 정적 월드 객체와의 충돌 여부를 확인합니다.

3. SweepTestByProfile

SweepTestByProfile 함수는 특정 충돌 프로파일을 사용하여 스윕 테스트를 수행합니다. 이 함수는 형태가 경로를 따라 이동할 때 충돌 프로파일에 정의된 충돌 설정을 기반으로 객체와 충돌하는지 확인합니다.

사용 방법

  1. 스윕 형태: 월드를 통해 스윕할 형태를 정의합니다.
  2. 시작 및 종료 지점: 스윕의 시작 지점과 종료 지점을 지정합니다.
  3. 충돌 프로파일: 충돌 프로파일을 사용합니다.
  4. 결과: 함수는 차단 히트가 발견되었는지 여부를 나타내는 부울 값을 반환하며, 히트가 발생한 경우 FHitResult 객체에 히트에 대한 자세한 정보를 제공합니다.

예제 코드

FHitResult HitResult;
FVector Start = GetActorLocation();
FVector End = Start + FVector(1000, 0, 0); // 1000 유닛 앞으로 스윕
FCollisionShape CollisionShape = FCollisionShape::MakeSphere(50.0f); // 반지름 50의 구

bool bHit = GetWorld()->SweepTestByProfile(
    HitResult,
    Start,
    End,
    FQuat::Identity,
    TEXT("MyCollisionProfile"), // 충돌 프로파일 이름
    CollisionShape
);

if (bHit)
{
    // 히트 결과 처리
}

이 예제에서는 반지름 50 유닛의 구가 액터의 위치에서 1000 유닛 앞으로 스윕 되며, "MyCollisionProfile"이라는 충돌 프로파일을 사용합니다.


이렇게 해서 언리얼 엔진 5에서의 주요 스윕 테스트 함수들에 대해 알아보았습니다. 각 함수는 특정 상황에서 유용하게 사용될 수 있으므로, 필요에 따라 적절한 함수를 선택하여 사용하시기 바랍니다.

728x90