virtual void functionName() = 0;
인터페이스를 사용해서 게임 프레임 워크를 구현한 예시
월드에 배체되는 모든 오브젝트는 Actor 로 만들어진다. ( 움직이는, 안움직이는)
이때 움직이는 오브젝트의 경우 Actor 를 상속하는
...
TArray<UObject*> ObjectArr = {NewObject<???>(), NewObject<???>(), NewObject<???>()};
for(auto ObjectElem : ObjectArr)
{
UMyInterface* InterfacedObjectElem = Cast<UMyInterface>(ObjectElem);
if(InterfacedObjectElem)
{
UE_LOG(LogTemp,Log, TEXT("인터페이스가 구현되어 있습니다."));
InterfacedObjectElem->Interfacefunc1();
}
else{
UE_LOG(LogTemp,Log, TEXT("인터페이스가 구현되어 있지 않습니다."));
}
}
인터페이스의 함수에서
#pragma once
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "MyInterface.generated.h"
/** 언리얼엔진에서 타입정보를 보관하기 위해 만든 클래스. 수정할 필요가 없습니다. */
UINTERFACE(BlueprintType)
class UMyInterface : public UInterface
{
GENERATED_BODY()
};
/**
* 인터페이스
*/
class MODULENAME_API IMyInterface
{
GENERATED_BODY()
public:
/** 인터페이스를 상속하는 클래스에서도 _Implemantation 함수로 구현할 수 있고,
상속하는 블루프린트에서도 구현할 수 있는 함수
*/
UFUNCTION(BlueprintCallable,BlueprintNativeEvent, Category="MyInterface")
void Action(int32 Idx, float Value,const FString& Message);
// 구현 강제
virtual void InterfaceFunc1() = 0;
};