언리얼 충돌 시스템 핵심 정리 (콜리전 프리셋, 트레이싱)
언리얼 Collision 학습 노트. 강의 7.1~7.2에서 개념만 추림. 콜리전 헷갈릴 때 다시 보기.
충돌체 종류 세 가지
한 액터에 셋 다 들어갈 수 있음. 보통 루트인 프리미티브 컴포넌트(캡슐/박스)가 충돌체 역할.
- 스태틱메시 컴포넌트: 메시 애셋 자체를 충돌체로. 비주얼 + 충돌 동시 설정 가능
- 기본 도형 컴포넌트: 구체/박스/캡슐. 스켈레탈 메시엔 캡슐 조합이 흔함
- 피직스 애셋: RagDoll용. 각 관절 충돌체. 스켈레탈 메시 전용
콜리전 프리셋 = 세 설정의 묶음
콜리전 프리셋 = 콜리전 프로파일 (같은 말). 다음 셋을 묶은 것:
- Collision Enabled: 어떤 반응이 가능한가
- Object Type: 충돌체 분류(채널)
- Collision Responses: 다른 채널과 어떻게 반응하는가
Collision Enabled 세 종류
- Query Only: 신호만. 겹침 감지(Overlap), LineTrace, Sweep이 여기 속함
- Physics Only: 물리 반응만. 밀어내기, 사슬 같은 제약
- Query and Physics: 둘 다. 다 되지만 계산량 증가
Object Type (채널)
"채널" = 분류라는 뜻.
대분류:
- 오브젝트 채널: 개체에 붙은 충돌체 종류 식별 (WorldStatic, WorldDynamic, Pawn, PhysicsBody)
- 트레이스 채널: 경로 따라 충돌 감지 (Visibility, Camera)
소분류 의미:
- WorldStatic: 안 움직이는 배경. 주로 스태틱메시
- WorldDynamic: 움직이는 액터
- Pawn: 플레이어 조종 폰. 캡슐 컴포넌트에 부여
- PhysicsBody: 물리 시뮬레이션으로 움직임
- Visibility: 시각적으로 보이는지 탐지(폰 제외). 마우스 피킹에도 사용
- Camera: 카메라~목표물 장애물 탐지
함정: Collision Presets의 Pawn과 Object Type의 Pawn은 다른 의미. 정확한 채널은 Object Type을 봐야 함. Block All 선택 시 Object Type은 WorldStatic으로 잡힘.
Collision Responses 세 종류
- 무시(Ignore): 반응 없음, 뚫고 지나감
- 겹침(Overlap): 뚫고 지나가지만 이벤트 발생
- 막힘(Block): 못 지나가게 막음
가장 중요한 함정: 양쪽 다 Block이어야 실제로 막힘. A는 B에 Block인데 B는 A에 Overlap이면 결국 안 막히고 겹침. 언리얼은 성능 위해 Ignore를 최대화, Block을 최소화하는 설계.
Overlap 이벤트 vs Hit 이벤트
- Generate Overlap Events 체크 + 양쪽 겹침 반응 → BeginOverlap / EndOverlap 발생
- Generate Hit Events 체크 + 양쪽 막힘 반응 → Hit 발생
콜리전 채널 개수 제한
언리얼은 총 32개 채널. 엔진 기본 8개 + 예약 6개 → 프로젝트에서 쓸 수 있는 건 18개. 새로 만든 채널은 ECC_GameTraceChannel1~18 중 배정. 매핑은 Config/DefaultEngine.ini에서 채널 이름으로 검색하면 확인 가능. C++에선 #define으로 ECC_GameTraceChannelN을 의미 있는 이름에 매핑해서 씀.
트레이싱 함수 이름 규칙
{처리방법}{대상}{처리설정} 조합.
- 처리방법: LineTrace / BoxTrace / SphereTrace / CapsuleTrace / Sweep / Overlap
- 대상: Test(감지 여부만) / Single·AnyTest(단일 정보) / Multi(전부 배열)
- 처리설정: ByChannel / ByObjectType(오브젝트 타입) / ByProfile(프리셋)
예) SweepMultiByChannel = 쓸기 + 전부 + 채널 기반. 물리는 월드 기능이라 GetWorld()로 호출.
꼭 기억할 함정 두 개
FHitResult의 Actor는 TWeakObjectPtr. 로우 포인터면 GC돼야 할 액터가 메모리에 남기 때문. 접근 전 IsValid() 체크 필수. GetActor()는 내부적으로 유효성 검사 포함.
트레이스 시 자기 자신은 무시 목록에 넣어야 함. 안 그러면 자기 충돌체에 걸림. FCollisionQueryParams 생성 시 this를 넘기는 이유.
디버그 드로잉
로그 대신 시각화하려면 DrawDebug 계열(DrawDebugCapsule 등) 사용. 콘솔 변수(FAutoConsoleVariableRef)로 on/off 토글하면 릴리즈에 영향 없이 디버깅 가능. 캡슐은 기본이 세로라 트레이스 방향으로 눕히려면 회전 행렬(FRotationMatrix::MakeFromZ) 적용 필요.
'학습 > Unreal' 카테고리의 다른 글
| 언리얼 AI 기초 정리 (AIController, Behavior Tree, Blackboard) (0) | 2026.05.16 |
|---|---|
| 언리얼 데미지 프레임워크와 죽음 처리 정리 (TakeDamage) (0) | 2026.05.16 |
| 언리얼 애니메이션 시스템 정리 (AnimInstance, State Machine, Montage, Notify) (0) | 2026.05.06 |
| 언리얼 Character와 시점 구현 정리 (Enhanced Input, Control Rotation, BackView/QuarterView) (0) | 2026.05.01 |
| 언리얼 Pawn과 게임플레이 프레임워크 정리 (GameMode, Controller, 입력, 애니메이션) (0) | 2026.05.01 |
