2024/02/05 TIL

양우창·2025년 2월 5일

내일배움캠프 TIL

목록 보기
20/22

오늘 배운 내용

1. 충돌 이벤트로 아이템 획득하기

핵심 포인트:

  • 콜리전(충돌) 이벤트를 이용해서 플레이어가 아이템 근처에 들어서면 자동으로 획득되도록 구현했다.
  • Overlap 이벤트가 핵심! Hit 이벤트는 물리 충돌 있을 때 쓰니까, 그냥 겹치는 것만 감지할 땐 Overlap이 딱이다.

세부 내용:

  • 충돌 영역(콜리전 볼륨)

    • SphereComponentBoxComponent를 사용해 아이템 주변에 영역을 설정해두면, 플레이어가 들어오면 자동으로 이벤트 발생!
    • 예를 들어, Collision->SetCollisionProfileName(TEXT("OverlapAllDynamic")); 이렇게 하면 오버랩만 감지해서 깔끔하게 처리 가능.
  • 이벤트 바인딩

    • Collision->OnComponentBeginOverlap.AddDynamic(this, &ABaseItem::OnItemOverlap);
    • 플레이어가 영역에 들어오면 OnItemOverlap 함수가 호출되고, 그 안에서 플레이어 태그("Player")를 확인해서 아이템 획득 로직 실행!

2. 아이템 클래스 설계 및 구현

기본 아이템 클래스(ABaseItem) :

  • 구성 요소 :

    • SceneComponent : 루트 컴포넌트로 사용.
    • USphereComponent (Collision) : 플레이어가 가까이 오면 오버랩 이벤트 발생.
    • UStaticMeshComponent: 아이템의 시각적 표현 담당.
  • 핵심 함수 :

    • OnItemOverlapOnItemEndOverlap : 오버랩 시작/종료 시 호출되는 함수.
    • ActivateItem : 실제 아이템 획득(또는 사용) 로직을 처리.

인터페이스 구현 :

  • 모든 아이템이 가져야 할 최소 동작을 정의하는 ItemInterface를 만들어서, 오버랩 이벤트 시 실행할 함수 시그니처를 통일시킴.

3. 다양한 아이템 구현 사례

  • 코인 아이템 :

    • CoinItem 클래스에서 점수 부여 로직을 ActivateItem에 구현.
    • BigCoinItem과 SmallCoinItem은 점수 값만 다르게 오버라이드!
  • 힐링 아이템 :

    • 플레이어가 오버랩 시 체력 회복 디버그 메시지 출력 후 아이템 제거.
  • 지뢰 아이템 :

    • 플레이어가 범위에 들어가면 타이머 시작 후 5초 뒤 폭발.
    • 폭발 시 ExplosionCollision 영역 내의 플레이어에게 데미지를 줌.
    • 폭발 후 DestroyItem() 호출로 아이템 제거.

4. 블루프린트와 콜리전 설정

  • 블루프린트 생성:
    • C++ 클래스를 기반으로 블루프린트를 만들어서 시각적 설정(Static Mesh, Material 등) 변경 가능.
  • 콜리전 디버깅:
    • Alt + C로 콜리전 영역 시각적으로 확인해서 설정 이상 없나 체크.


결론 & 느낀 점

오늘 배운 걸 보니까, 언리얼의 충돌 이벤트 시스템은 직관적이면서도 강력함.
플레이어가 그냥 지나가기만 해도 아이템이 획득되도록 구현하는 건, 게임 디자인 측면에서 확실히 편리한 것 같음.

그리고 디버깅할 땐 충돌 프리셋, 콜리전 채널 등을 꼼꼼히 확인해야 한다는 점! 실수하면 오버랩 이벤트가 아예 안 뜰 수도 있음.

profile
내배캠 언리얼 엔진 1기

0개의 댓글