info8995 님의 블로그

TIL언리얼 엔진에서 Overlap 이벤트를 활용한 아이템 획득 시스템 구현 본문

TIL(Today I Learned)/Unreal Engine

TIL언리얼 엔진에서 Overlap 이벤트를 활용한 아이템 획득 시스템 구현

info8995 2025. 2. 12. 20:39

1️⃣ 충돌 (Collision) 이벤트 기반 아이템 획득 방식 이해하기

  • 언리얼 엔진에서 아이템을 자동으로 획득하도록 하려면 콜리전(충돌) 이벤트를 활용하는 것이 일반적이다.
  • 충돌 영역 (Collision Volume)
    • 아이템 주변에 SphereComponent 또는 BoxComponent를 추가하여 충돌을 감지한다.
    • 플레이어가 영역에 진입하면 Overlap 이벤트가 발생하고, 이를 통해 아이템 획득을 처리한다.
  • Overlap 이벤트 vs. Hit 이벤트
    • Overlap 이벤트: 실제 충돌 없이 겹치기만 해도 감지됨. → 아이템 획득, 트리거 존 감지 등에 사용.
    • Hit 이벤트: 실제 물리 충돌이 발생할 때 실행됨. → 탄환 충돌 등의 경우에 사용.
  • 아이템 획득 처리 방식
    • Overlap 이벤트 발생 시 ActivateItem()을 호출하여 아이템 효과를 적용하고, DestroyItem()으로 제거할 수 있다.

2️⃣ BaseItem 클래스 구현

아이템의 기본 기능을 담당하는 부모 클래스(ABaseItem)을 작성하고, 충돌 감지 기능을 추가한다.

(1) BaseItem.h - 아이템 기본 클래스

(2) BaseItem.cpp - 아이템 기본 클래스 구현

3️⃣ ItemInterface 인터페이스 수정

아이템에 필요한 기본 기능을 제공하는 인터페이스(IItemInterface)를 정의하고, Overlap 이벤트 처리 함수의 시그니처를 수정했다.

4️⃣ 아이템 Blueprint 생성 및 Static Mesh 설정

C++ 클래스 기반 블루프린트 생성

  • BigCoinItem, SmallCoinItem, MineItem, HealingItem C++ 클래스를 기반으로 블루프린트를 생성합니다.
    • 언리얼 에디터에서 해당 C++ 클래스를 우클릭 → Create Blueprint Class based on… 선택 후 블루프린트 생성

Static Mesh 및 머티리얼 설정

  1. Components 패널에서 StaticMesh (UStaticMeshComponent) 선택
  2. Details 패널에서
    • Static Mesh를 원하는 메시로 변경
    • Material 항목에서 머티리얼 적용

5️⃣ 콜리전 범위 (Sphere Radius) 조정

  • ABaseItem 클래스에서 이미 SphereComponent가 생성되어 있음
  • BP 상속 후 SphereComponent를 선택하여 크기 조정
    • Details 패널 → Sphere Radius 값 변경하여 적절한 크기로 조절
    • 뷰포트에서 크기 즉시 확인 가능

6️⃣ 아이템 액터의 콜리전 프리셋 설정

콜리전 컴포넌트 설정 확인

  1. 생성한 BP (BP_BigCoin, BP_HealingItem 등) 더블 클릭
  2. Components 패널에서 SphereComponent(또는 BoxComponent) 선택
  3. Details 패널에서 Collision 섹션 확인
    • 기본적으로 부모 클래스(ABaseItem)에서 OverlapAllDynamic로 설정됨

콜리전 프리셋 (Collision Preset) 종류

프리셋 이름설명사용 예시

NoCollision 충돌 감지 없음 단순 배경 오브젝트 (하늘, 장식 등)
BlockAll 모든 객체와 충돌 (Overlap 이벤트 없음) 벽, 바닥 같은 고정된 장치
OverlapAll 모든 객체와 Overlap 이벤트 발생 트리거 존, 감지 센서
BlockAllDynamic 움직이는 객체만 충돌 플레이어와 상호작용하는 문, 벽
OverlapAllDynamic 움직이는 객체와 Overlap 이벤트 발생 아이템, 센서
Pawn 플레이어나 AI 대상 충돌 감지 플레이어 전용 문, AI 전용 센서
Custom 개별 채널 설정 가능 특정 객체와의 충돌 커스텀

물리 반응 여부 (Collision Enabled)

  • NoCollision → 충돌 비활성화
  • Query Only → Overlap/Hit 이벤트 감지, 물리 반응 없음
  • Physics Only → 물리 반응 O, 이벤트 X
  • Query and Physics → 이벤트 감지 + 물리 반응 O

7️⃣ 캐릭터 태그 부여 및 콜리전 프리셋 설정

플레이어 클래스에 “Player” 태그 부여

  1. Details 패널에서 플레이어 캐릭터 선택
  2. Actor 섹션의 Tags 항목에 "Player" 추가
  3. C++ 코드에서 OtherActor->ActorHasTag("Player")로 플레이어 여부 판별 가능

플레이어 클래스 콜리전 채널 확인

  1. BP_SpartaCharacter의 Capsule Component 선택
  2. Details 패널 → Collision Presets가 Pawn으로 설정되어 있는지 확인
    • Pawn은 OverlapAllDynamic과 호환되어 Overlap 이벤트 발생 가능
  3. Overlap 이벤트가 작동하지 않는다면, Project Settings > Collision에서
    • Pawn 채널과 OverlapAllDynamic 채널의 상호작용 설정 확인