1. 충돌 이벤트로 획득되는 아이템 구현하기
충돌 (Collision) 이벤트 기반 아이템 획득 방식 이해하기
플레이어가 가까이 다가가기만 해도 자동으로 획득시키고 싶다면 콜리전 (충돌) 이벤트를 사용
충돌 영역 (Collision Volume)
- 아이템 액터 주변에 SphereComponent 나 BoxComponent 같은 충돌 컴포넌트를 붙여둠
- 플레이어가 이 영역 안에 들어오면 Overlap 이벤트가 발생, 이를 감지해 아이템 획득 로직을 실행
Overlap 이벤트 / Hit 이벤트
Overlap 이벤트
- 물리적으로 부딪히는 것 없이 액터들이 서로 겹치기 시작했을 때 발생
- 아이템 획득, 트리거 존 감지 같은 경우에 주로 사용
Hit 이벤트
- 실제 물리 충돌이 일어날 때 발생(예: 탄환이 벽에 부딪히는 장면)
- 아이템 획득처럼 겹침만 감지하면 되는 경우에는 Overlap 이벤트가 더욱 적합함
아이템 획득 처리
- 충돌 영역 안에 플레이어가 들어오면 (Overlap 시작 시점), 아이템이 즉시 사라지거나 DestroyItem(), 점수를 올리거나 체력을 회복하는 등 다양한 로직을 실행
기본 아이템 클래스(BaseItem)에 충돌 컴포넌트와 메시 컴포넌트 추가
BaseItem 클래스는 모든 아이템(코인, 포션, 무기 등)에 공통으로 필요한 기능을 담는 부모 클래스
다음과 같은 컴포넌트와 함수를 포함
SceneComponent* Scene;
액터(아이템)의 루트 컴포넌트로 사용
USphereComponent* Collision;
플레이어가 범위 안에 들어오면 Overlap 이벤트를 발생시킬 충돌 컴포넌트
UStaticMeshComponent* StaticMesh;
아이템이 월드에 표시될 때, 시각적인 모습을 담당


CollisionComponent->SetCollisionProfileName(TEXT("OverlapAllDynamic"));
SphereComponent가 다른 액터와 겹칠 때만 Overlap 이벤트를 발생시키도록 설정
물리적인 충돌은 발생 X
OnComponentBeginOverlap.AddDynamic(this, &ABaseItem::OnItemOverlap);
플레이어가 범위 안에 들어올 때 자동으로 OnItemOverlap을 호출


ItemInterface 인터페이스 함수 시그니처 수정

2. 아이템 Blueprint 생성 및 콜리전/메시 설정하기
아이템 Blueprint 생성 및 Static Mesh 설정
C++ 클래스 기반 블루프린트 생성
C++로 작성한 클래스 (BigCoinItem, SmallCoinItem, MineItem, HealingItem) Blueprint를 생성
Static Mesh 및 머티리얼 설정
Components 패널 StaticMesh (UStaticMeshComponent) 선택 후 에셋 설정
Material 적용하기
Components → Scene → Details 패널 → Tranform 에서 머티리얼 크기 조절
콜리전 범위 (Sphere Radius) 조정
Components 패널 → SphereComponent 선택
기본적으로 ABaseItem 클래스 내에서 충돌 컴포넌트가 생성되어 있을 것임 → BP 상속 시 그대로 노출
Details 패널에서 크기 조정
Sphere Radius 값을 변경하면 충돌 범위를 직관적으로 조절 가능
아이템 액터의 콜리전 프리셋 설정
주요 프리셋 옵션
- NoCollision
- 충돌을 전혀 감지하지 않으므로, Overlap 또는 Hit 이벤트가 발생 X
- 단순 배경 오브젝트(하늘, 장식용 액터 등)
- BlockAll
- 모든 객체와 충돌하여 막게 됨. 물리적으로 충돌하지만, Overlap 이벤트는 발생 X
- 벽, 바닥 같은 고정된 장치
- OverlapAll
- 모든 객체와 Overlap 이벤트를 발생
- 트리거 존, 감지 센서, 투명한 오브젝트
- BlockAllDynamic
- 움직이는 (Dynamic) 객체만 충돌을 막음. 고정된 객체와는 충돌 X
- 움직이는 플레이어나 물리 오브젝트와 상호작용하는 문, 벽. 고정된 환경 요소와는 무관하게 작동.
- OverlapAllDynamic
- 움직이는 (Dynamic) 객체와 Overlap 이벤트를 발생
- 플레이어가 근처에 있는지 확인하는 아이템, 센서. Overlap 이벤트가 필요하지만, 물리 충돌이 필요 없는 경우.
- Pawn
- 플레이어나 AI처럼 Pawn 타입 객체를 대상으로 충돌을 감지하거나 막음
- 플레이어 전용 문, AI 전용 센서
- Custom
- 각 채널에 대해 충돌 응답(Overlap, Block, Ignore)을 객체별로 세부적으로 설정 가능
물리 반응 여부 (Collision Enabled)
- NoCollision: 충돌 비활성화
- Query Only: Overlap, Hit 등 충돌 이벤트는 감지하지만, 물리적으로 튕기거나 밀리는 반응은 없음
- Physics Only: 물리 반응만 일어나고, 이벤트 (Overlap/Hit)는 발생하지 않음
- Query and Physics: 충돌 이벤트 + 물리 반응 모두 활성화
3. 아이템 클래스 충돌 처리 구현하기
CoinItem.h
코인 아이템 공통 부모 클래스 충돌 처리
CoinItem: 코인 아이템이 가져야 할 공통 기능(점수) 정의
실제 점수 획득은 ActivateItem 함수에서 처리
CoinItem.cpp
PointValue
Blueprint에서도 값을 바꿀 수 있음
스몰 코인은 10점, 빅 코인은 50점처럼 다양한 코인을 쉽게 파생시킬 수 있음


빅 코인, 스몰 코 아이템 충돌 처리


힐링 아이템 충돌 처리


지뢰 아이템 충돌 처리
MineItem.h
bIsActivated: 이미 지뢰가 발동되었는지 여부를 체크
ActivateItem: 발동 이후 타이머를 설정하고, 폭발 함수를 스케줄링
Explode: 타이머가 만료되었을 때 실제 폭발 처리를 담당
MineItem.cpp
ActivateItem
GetWorld()->GetTimerManager().SetTimer 를 사용 → 5초 후 Explode()가 자동 실행되도록 지연 호출 (Delayed Call)
폭발 처리 후 DestroyItem()을 호출해 지뢰 아이템 자체를 제거


콜리전 비주얼 디버깅
언리얼 에디터 → Alt + C (콜리전 디버그 모드)
Capsule Component, Sphere, Box 같은 다른 콜리전 영역도 시각적으로 확인 가능함
콜리전이 비정상적으로 설정되어 있을 경우, 빠르게 확인 가능
'C++와 Unreal Engine으로 3D 게임 개발' 카테고리의 다른 글
| C++와 Unreal Engine으로 3D 게임 개발 3-4 (0) | 2026.06.21 |
|---|---|
| C++와 Unreal Engine으로 3D 게임 개발 3-3 (0) | 2026.06.20 |
| C++와 Unreal Engine으로 3D 게임 개발 3-1 (0) | 2026.06.18 |
| C++와 Unreal Engine으로 3D 게임 개발 2-4 (0) | 2026.06.12 |
| C++와 Unreal Engine으로 3D 게임 개발 2-3 (0) | 2026.06.10 |