
# 지오메트리 스위핑(Geometry Sweeping)
1. 이동 경로에 있는 충돌체를 미리 감지
2. 충돌 위치, 충돌된 액터 정보 등을 추출할 수 있다.

핵심 함수 : SweepSingleByChannel(FHitResult 구조체, 시작 위치, 끝 위치, 회전 값, 트레이스 채널, 충돌 모양)
- FHitResult 구조체 : 충돌 탐색의 결과를 담을 구조체
- 트레이스 채널 : 충돌 검사를 수행할 채널
트레이스 채널에 대한 설명이 필요한데,
트레이스 채널이란, 물리 쿼리 시 사용할 필터로
물리 쿼리란 충돌 채널과 충돌 형태를 정해 월드에서 해당 결과를 받아오는 작업이다.
즉, '채널'이 일치하는 충돌체만 충돌로 판단하려는 용도이다.
트레이스 채널에서 Overlapped와 Block만 충돌로 판단하고, ignore는 무시한다.
이렇게 하는 이유는, 특정 오브젝트와 충돌하는지를 판단하고 싶지, 벽이나 장애물, 바닥을 충돌로 판단하고 싶지 않아서다.
이걸 트레이스 채널로 구분한다.
특정 오브젝트만 충돌로 인식하고, 나머지 오브젝트는 충돌설정을 하고 싶지 않다면
가장 쉬운 방법은 새로운 트레이스 채널을 생성하고 특정 오브젝트만 Block 또는 Overlapped로 설정하는 방법이 있다.
1. 프로젝트 세팅 → 엔진 - 콜리전 → 새 트레이스 채널

→ 이름 설정하고 ignore 설정

이렇게 하면 추가된 트레이스 채널은 모든 오브젝트 대상으로 '무시' 상태가 된다.
이 때, 충돌 검사를 하고 싶은 오브젝트만 선택해서 따로 '트레이스 반응'을 "블록"으로 수정한다.


이렇게 하면 특정 오브젝트만 이동 경로에 충돌체 검사 여부를 확인할 때, 해당 오브젝트만 결과 값에 들어온다.
그러면 "Grabber" 트레이스 채널이 C++에서 채널 타입이 무엇인지 알아야 하는데
Config 폴더에 "DefaultEngine.ini" 파일을 열고
Ctrl + F로 "Grabber" 트레이스 채널을 검색하면 채널 값을 알 수 있다.


여기서 채널이 ECC_게임 트레이스 채널 2번이라고 나와있고, 이걸 그대로 복사해서 매개변수로 넣어준다.
마지막 매개변수는 FCollisionShape인데, 말 그대로 충돌체의 모양을 뭘로 할 것인지를 정해주면 된다.
보편적으로 사각형 또는 구을 사용하는데, 편의상 원으로 지정했다.
MakeSphere()로 구체를 지정하는데 이 때 반지름의 길이를 직접 설정해줘야 한다.
이렇게 하면 gif처럼 충돌하면 대상에 대한 정보를 가져오는 별도의 코드를 작성해주면 된다.

false라면 충돌된 대상의 포인터가 없다는 뜻이고, true면 충돌된 대상의 포인터가 있다는 뜻이므로
FHitResult에 담겨있는 충돌 대상을 AActor*로 가져와서 처리할 수 있다.
'Unreal Engine > 기능 구현' 카테고리의 다른 글
| [Unreal Engine 5] 오브젝트 잡기(Grab) (0) | 2025.06.17 |
|---|---|
| [Unreal Engine 5] Draw Debug Sphere (0) | 2025.06.16 |
| [Unreal Engine 5] Draw Debug Line (0) | 2025.06.16 |
| [Unreal Engine 5] Lerp (0) | 2025.06.16 |
| [Unreal Engine 5] 루멘 적용 후 부자연스러울 때 체크 (0) | 2025.06.15 |
