PART 2 · 강의 1/3

콜리전 채널과 프리셋

ECollisionChannel, Collision Profile, Trace/Overlap의 동작 원리

01

콜리전 시스템 개요

Object Channel, Trace Channel, Response의 관계

UE5의 콜리전 시스템은 세 가지 핵심 개념으로 구성됩니다: Object Channel(오브젝트가 무엇인지), Trace Channel(어떤 종류의 검사인지), Collision Response(어떻게 반응할지).

기본 Object Channel 용도 예시
WorldStatic움직이지 않는 정적 오브젝트바닥, 벽, 건물
WorldDynamic움직일 수 있는 동적 오브젝트문, 물리 소품
Pawn플레이어/AI 캐릭터캐릭터, NPC
PhysicsBody물리 시뮬레이션 오브젝트물리 큐브, 파편
Vehicle차량자동차, 탱크
Destructible파괴 가능 오브젝트Geometry Collection
기본 Trace Channel 용도
Visibility시선 차단 검사 (LOS)
Camera카메라 충돌 검사
Collision Response 종류

Ignore: 완전히 무시. Overlap: 겹침 감지는 하지만 물리적 차단 없음 (OnOverlap 이벤트 발생). Block: 물리적으로 차단하며 충돌 (OnHit 이벤트 발생). 두 오브젝트 모두 Block이어야 실제로 차단됩니다.

02

커스텀 채널과 프리셋

프로젝트별 채널 추가와 프로파일 관리

기본 채널만으로 부족한 경우, Project Settings > Engine > Collision에서 커스텀 Object/Trace Channel을 추가할 수 있습니다. 최대 18개의 커스텀 채널(ECC_GameTraceChannel1~18)을 사용할 수 있습니다.

C++ - 커스텀 채널 사용
// DefaultEngine.ini에 정의된 커스텀 채널 // [/Script/Engine.CollisionProfile] // +DefaultChannelResponses=(Channel=ECC_GameTraceChannel1, DefaultResponse=ECR_Block, bTraceType=False, bStaticObject=False, Name="Projectile") // C++ 에서 커스텀 채널 정의 (헤더) #define ECC_Projectile ECollisionChannel::ECC_GameTraceChannel1 #define ECC_Interactable ECollisionChannel::ECC_GameTraceChannel2 // 컴포넌트에 채널 설정 void AProjectile::SetupCollision() { SphereComp->SetCollisionObjectType(ECC_Projectile); // 모든 채널 Ignore로 초기화 후 필요한 것만 Block/Overlap SphereComp->SetCollisionResponseToAllChannels(ECR_Ignore); SphereComp->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Block); SphereComp->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Block); SphereComp->SetCollisionResponseToChannel(ECC_Pawn, ECR_Block); }
Collision Preset 활용

자주 사용하는 채널/응답 조합은 Collision Preset(Profile)으로 저장해두세요. Project Settings에서 정의하면 에디터 드롭다운에 나타나고, C++에서는 SetCollisionProfileName("MyPreset")으로 한 줄로 적용할 수 있습니다.

03

Line Trace와 Sweep

레이캐스트와 형상 캐스트의 활용

C++ - 다양한 Trace 방법
// 1. Line Trace (레이캐스트) FHitResult HitResult; FVector Start = GetActorLocation(); FVector End = Start + GetActorForwardVector() * 5000.0f; FCollisionQueryParams QueryParams; QueryParams.AddIgnoredActor(this); QueryParams.bTraceComplex = false; // Simple collision 사용 QueryParams.bReturnPhysicalMaterial = true; bool bHit = GetWorld()->LineTraceSingleByChannel( HitResult, Start, End, ECC_Visibility, QueryParams ); // 2. Sphere Sweep (구체 캐스트) FCollisionShape Shape = FCollisionShape::MakeSphere(50.0f); bHit = GetWorld()->SweepSingleByChannel( HitResult, Start, End, FQuat::Identity, ECC_Visibility, Shape, QueryParams ); // 3. Overlap (겹침 검사) TArray<FOverlapResult> Overlaps; FCollisionShape OverlapShape = FCollisionShape::MakeSphere(500.0f); GetWorld()->OverlapMultiByObjectType( Overlaps, GetActorLocation(), FQuat::Identity, FCollisionObjectQueryParams(ECC_Pawn), OverlapShape, QueryParams );
Trace 메서드 형상 대상 필터 반환
LineTraceSingleByChannel선(Ray)Trace Channel첫 번째 Hit
LineTraceMultiByChannel선(Ray)Trace Channel모든 Hit
SweepSingleByChannelSphere/Box/CapsuleTrace Channel첫 번째 Hit
OverlapMultiByObjectType임의 형상Object Channel모든 Overlap
LineTraceSingleByObjectType선(Ray)Object Channel첫 번째 Hit
ByChannel vs ByObjectType

ByChannel은 대상 오브젝트의 Collision Response를 확인합니다 (Block/Overlap/Ignore). ByObjectType은 대상의 Object Type만으로 필터링합니다. 게임플레이 목적(무기 히트 등)에는 ByChannel, 공간 쿼리(주변 적 탐색 등)에는 ByObjectType이 적합합니다.

04

Collision Enabled와 이벤트

콜리전 모드와 OnHit/OnOverlap 이벤트 처리

ECollisionEnabled 쿼리(Trace/Overlap) 물리 시뮬레이션 사용 사례
NoCollisionXX완전히 비활성화
QueryOnlyOX트리거, 오버랩 전용
PhysicsOnlyXO물리만, 쿼리 불필요
QueryAndPhysicsOO일반적 물리 오브젝트
ProbeOnlyO (제한적)XCCD용 경량 쿼리
C++ - OnHit / OnOverlap 이벤트 바인딩
void AMyActor::BeginPlay() { Super::BeginPlay(); // OnHit 이벤트 바인딩 (Block 시 발생) MeshComp->OnComponentHit.AddDynamic(this, &AMyActor::OnHit); // OnOverlap 이벤트 바인딩 (Overlap 시 발생) TriggerComp->OnComponentBeginOverlap.AddDynamic(this, &AMyActor::OnOverlapBegin); // Generate Overlap Events가 true여야 Overlap 발생 TriggerComp->SetGenerateOverlapEvents(true); } void AMyActor::OnHit( UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit) { // NormalImpulse: 충돌 강도와 방향 float ImpactForce = NormalImpulse.Size(); UE_LOG(LogTemp, Log, TEXT("Hit! Force: %f"), ImpactForce); }
SUMMARY

핵심 요약

  • 콜리전 시스템은 Object Channel(무엇인지), Trace Channel(검사 종류), Response(반응 방식)로 구성됩니다.
  • 커스텀 채널은 최대 18개까지 추가 가능하며, Collision Preset으로 자주 쓰는 조합을 관리합니다.
  • LineTrace는 선 검사, Sweep은 형상 캐스트, Overlap은 범위 겹침 검사입니다.
  • ByChannel은 응답 기반, ByObjectType은 타입 기반 필터링입니다.
  • 두 오브젝트 모두 Block이어야 실제로 물리적 차단이 발생합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 커스텀 콜리전 채널 생성

Project Settings에서 커스텀 Object Channel 2개(Projectile, InteractableObject)를 추가하고, Projectile이 InteractableObject만 Block하고 나머지는 Overlap하도록 Collision Preset을 구성하세요.

실습 2: Trace Channel 활용

커스텀 Trace Channel을 만들고 Line Trace를 사용하여 특정 채널의 액터만 감지하는 인터랙션 시스템을 구현하세요. 디버그 라인으로 Trace 결과를 시각화하세요.

심화 과제: 복합 콜리전 시나리오 설계

Player, Enemy, Projectile, Shield, PickupItem 5가지 콜리전 프리셋을 설계하세요. Shield가 Projectile만 Block하고, PickupItem이 Player만 Overlap하는 완전한 콜리전 매트릭스를 구현하세요.