[TIL] 2026-01-16 | UE 아이템 시스템 구현하기 (1), 아이템 인터페이스

2026. 1. 16. 20:55·내배캠Unreal_TIL/UE
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
'내배캠Unreal_TIL/UE' 카테고리의 다른 글
  • [TIL] 2026-01-20 | 과제 6에 타이머로 자동문 추가
  • [TIL] 2026-01-19 | UE 아이템 시스템 구현하기 (2), Timer, SpawnActor
  • [TIL] 2026-01-16 | UE 애니메이션 리타겟팅
  • [TIL] 2026-01-15 | UE 회전 발판과 움직이는 장애물
윤윤씨
윤윤씨
🎮 내일배움캠프 Unreal 7기
  • 윤윤씨
    컴퓨터온열맛사지
    윤윤씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (62)
      • 내배캠Unreal_TIL (62)
        • C++ (23)
        • UE (31)
        • 팀프로젝트 (7)
      • etc (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Solved.ac
    • YouTube
  • 태그

    gas
    머티리얼
    언리얼과제
    디자인패턴
    코드카타
    프로그래머스
    스테이트머신
    STL
    챌린지
    ta
    오토마타
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
윤윤씨
[TIL] 2026-01-16 | UE 아이템 시스템 구현하기 (1), 아이템 인터페이스
상단으로

티스토리툴바