C++와 Unreal Engine으로 3D 게임 개발 3-1,2
1. WHAT
인터페이스란?
반드시 구현해야 할 함수 목록만을 미리 정의해두고 실제 함수의 동작은 해당 클래스를 상속받거나 구현하는 쪽에서 자유롭게 작성할 수 있도록 하는 일종의 '계약서'이다!
2. HOW
- 아이템 시스템 구조 및 생성
아이템 인터페이스를 구현해준다.
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "ItemInterface.generated.h"
UINTERFACE(MinimalAPI)
class UItemInterface : public UInterface
{
GENERATED_BODY()
};
class SPARTAPJ_API IItemInterface
{
GENERATED_BODY()
public:
virtual void OnItemOverlap(AActor* OverlapActor) = 0;
virtual void OnItemEndOverlap(AActor* OverlapActor) = 0;
virtual void ActivateItem(AActor* Activator) = 0;
virtual FName GetItemType() const = 0;
};
그리고 BaseItem은 인터페이스와 엑터를 상속받는다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ItemInterface.h"
#include "BaseItem.generated.h"
UCLASS()
class SPARTAPJ_API ABaseItem : public AActor, public IItemInterface
{
GENERATED_BODY()
public:
ABaseItem();
protected:
virtual void OnItemOverlap(AActor* OverlapActor) override;
virtual void OnItemEndOverlap(AActor* OverlapActor) override;
virtual void ActivateItem(AActor* Activator) override;
virtual FName GetItemType() const override;
virtual void DestroyItem();
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="Item")
FName ItemType;
};
#include "BaseItem.h"
ABaseItem::ABaseItem()
{
PrimaryActorTick.bCanEverTick = false;
}
void ABaseItem::OnItemOverlap(AActor* OverlapActor)
{
}
void ABaseItem::OnItemEndOverlap(AActor* OverlapActor)
{
}
void ABaseItem::ActivateItem(AActor* Activator)
{
}
FName ABaseItem::GetItemType() const
{
return ItemType;
}
void ABaseItem::DestroyItem()
{
Destroy();
}
BaseItem을 상속받아 각 아이템 Coin,Healing,Mine을 생성한다.

- 아이템 상호작용 구현
ABaseItem::ABaseItem()
{
PrimaryActorTick.bCanEverTick = false;
Scene = CreateDefaultSubobject<USceneComponent>(TEXT("Scene"));
SetRootComponent(Scene);
Collision = CreateDefaultSubobject<USphereComponent>(TEXT("Collision"));
Collision->SetupAttachment(Scene);
StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMesh->SetupAttachment(Collision);
}
충돌을 감지할 수 있도록 BaseItem에 씬루트, 스피어 콜리전, 스태틱 매쉬를 추가한다.

ABaseItem::ABaseItem()
{
PrimaryActorTick.bCanEverTick = false;
Scene = CreateDefaultSubobject<USceneComponent>(TEXT("Scene"));
SetRootComponent(Scene);
Collision = CreateDefaultSubobject<USphereComponent>(TEXT("Collision"));
Collision->SetCollisionProfileName(TEXT("OverlapAllDynamic"));
Collision->SetupAttachment(Scene);
StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMesh->SetupAttachment(Collision);
// 이벤트 바인딩
Collision->OnComponentBeginOverlap.AddDynamic(this, &ABaseItem::OnItemOverlap);
Collision->OnComponentEndOverlap.AddDynamic(this, &ABaseItem::OnItemEndOverlap);
}
콜리전에 "OverlapAllDynamic" 설정을 해준다.

임시로 작성해뒀던 파라미터를 수정해서 추가해준다.
엔진이 런타임 시 함수를 찾을 수 있도록 UFUNCTION()을 붙여준다!!
void ABaseItem::OnItemOverlap(
UPrimitiveComponent* OverlappedComp,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult)
{
if (OtherActor && OtherActor->ActorHasTag("Player")) //충돌 체크
{
ActivateItem(OtherActor);
}
}
BaseItem에서 플레이어 충돌을 체크하는 코드를 구현한다.
그리고 캐릭터 BP 디테일 창에서 태그를 달아준다.("Player")

이제 "Player"와 콜리전컴포넌트 오버랩이 감지되면 각 아이템의 ActivateItme()이 호출되고 그 안에서 로직 처리를 해주면 된다!
to be continue...
[TIL] 2025-01-19 | UE 아이템 시스템 구현하기 (2), Timer, SpawnActor
C++와 Unreal Engine으로 3D 게임 개발 3-2,31. WHAT- Timer 타이머(Timer) 는 Tick()을 사용하지 않고도 일정 시간 후 함수 실행 또는 주기적인 로직 처리를 가능하게 해주는 시스템TimerManager타이머를 실제로
zzageuli.tistory.com
'내배캠Unreal_TIL > UE' 카테고리의 다른 글
| [TIL] 2026-01-20 | 과제 6에 타이머로 자동문 추가 (2) | 2026.01.20 |
|---|---|
| [TIL] 2026-01-19 | UE 아이템 시스템 구현하기 (2), Timer, SpawnActor (0) | 2026.01.19 |
| [TIL] 2026-01-16 | UE 애니메이션 리타겟팅 (0) | 2026.01.16 |
| [TIL] 2026-01-15 | UE 회전 발판과 움직이는 장애물 (0) | 2026.01.15 |
| [TIL] 2026-01-14 | UE Pawn 클래스로 3D 캐릭터 만들기 (2) | 2026.01.14 |