클래스 -> 인터페이스를 구현 -> 반드시 포함되어야하는 함수를 구현
상속 vs 인터페이스
상속: 부모클래스로부터 물려받는 것
인터페이스: 약속을 함
인터페이스 구현 순서
#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;
};
부모 클래스를 상속받아 가상함수를 구현한다.
출처: 스파르타코딩 내일배움캠프