[내일배움캠프/UE] 인터페이스 기반 아이템 설계

김세희·2025년 7월 2일

✍️Today I Learned

  1. 인터페이스
  2. 아이템 클래스 계층 설계

인터페이스

클래스 -> 인터페이스를 구현 -> 반드시 포함되어야하는 함수를 구현

상속 vs 인터페이스
상속: 부모클래스로부터 물려받는 것
인터페이스: 약속을 함

인터페이스 구현 순서

  1. 인터페이스 정의
    UInterface - 인터페이스 만들기 - 함수 원형들만 정의(가상함수 형태)
  2. 아이템 클래스들이 이 인터페이스를 구현
    ex) OnItemOverlap()

UInterafce 클래스 헤더 구조 설명

#pragma once

#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "CH3_ItemInterface.generated.h"

// This class does not need to be modified.
UINTERFACE(MinimalAPI)
class UCH3_ItemInterface : public UInterface
{
	GENERATED_BODY()
};

class CH3_PROJECT_API ICH3_ItemInterface
{
	GENERATED_BODY()
public:
	// 순수 가상 함수 
	virtual void ActivateItem(AActor* Activator) = 0;
};

UCH3_ItemInterface
리플렉션 시스템이 인터페이스를 인식할 수 있도록 도와주기 위한 클래스. 수정할 필요 없음

UINTERFACE(MinimalAPI)
리플렉션 매크로. 이게 있어야 인터페이스가 리플렉션 시스템에 등록된다.
MinimalAPI: 현재 모듈에서만 접근 가능하도록 제한한다.

ICH3_ItemInterface
직접 구현하는 부분

❗인터페이스 cpp 파일
인터페이스에서는 구현을 하지 않기 때문에 cpp파일이 필요없지만 언리얼에서는 cpp파일을 웬만하면 지우기 않는 걸 추천한다.
리플렉션 시스템에서 해당 클래스를 인지할 때 헤더와 cpp 둘 다 확인하기때문에 필요없어도 지우면 안된다. 지금 에러가 안나도 어디서 꼬일 지 모른다.


아이템 클래스 계층 설계

- 아이템 인터페이스
- 부모 클래스 (Item)
	- 공통 코인 클래스
    	- 작은 코인 클래스
        - 큰 코인 클래스
    - 지뢰 클래스
    - 힐링 클래스

부모 클래스

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CH3_ItemInterface.h"
#include "BaseItem.generated.h"

UCLASS()
class CH3_PROJECT_API ABaseItem : public AActor, public ICH3_ItemInterface
{
	GENERATED_BODY()
    
public:
	// 가상 함수 
	virtual void ActivateItem(AActor* Activator) override;
};

아이템 인터페이스를 구현하므로 해당 헤더를 포함하고 클래스를 상속받는다.

자식 클래스

#pragma once

#include "CoreMinimal.h"
#include "BaseItem.h"
#include "HealingItem.generated.h"

/**
 * 
 */
UCLASS()
class CH3_PROJECT_API AHealingItem : public ABaseItem
{
	GENERATED_BODY()

public:
	AHealingItem();

	virtual void ActivateItem(AActor* Activator) override;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float HealAmount;
};

부모 클래스를 상속받아 가상함수를 구현한다.

출처: 스파르타코딩 내일배움캠프

0개의 댓글