본문 바로가기
개발이야기/언리얼 c++

언리얼 C++ to BP: BlueprintNativeEvent 매크로로 C++함수 오버라이드 하기

by oddsilk 2024. 6. 18.

 

Unreal Engine에서 C++로 선언된 함수를 블루프린트에서 오버라이드하려면, 함수 선언에 BlueprintNativeEvent 매크로를 사용해야 합니다. 또한, 해당 함수를 virtual로 선언하여 C++에서도 오버라이드할 수 있도록 해야 합니다.

 

BlueprintNativeEvent 매크로는 C++에서 기본 구현을 제공하고, 블루프린트에서 오버라이드할 수 있게 합니다.

이렇게 하면 함수의 기본 동작을 C++에서 정의하고, 블루프린트에서 이를 재정의할 수 있습니다.

 

1.  "BlueprintNativeEvent": C++에서 기본 구현을 제공하고, 블루프린트에서 오버라이드할 수 있는 함수
	선언에 사용됩니다.
2.  "_Implementation" 접미사: 함수의 기본 구현을 제공하는 C++ 함수 이름에 추가됩니다.

BlueprintNativeEvent 매크로를 사용하면 함수가 C++과 블루프린트 모두에서 오버라이드 가능해지며, 이는 Unreal Engine의 블루프린트와 C++ 간의 통합을 용이하게 합니다

 

헤더 파일 (.h)

먼저, 함수 선언에 BlueprintNativeEvent 매크로를 사용하고, _Implementation 접미사가 붙은 기본 구현 함수를 추가합니다.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()
    
public:
    // Sets default values for this actor's properties
    AMyActor();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:
    // Called every frame
    virtual void Tick(float DeltaTime) override;

    // Declare the function as BlueprintNativeEvent
    UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "MyCategory")
    void MyFunction();
    
    // This is the implementation function
    virtual void MyFunction_Implementation();
};

 

 

다음으로, 소스 파일에서 _Implementation 접미사가 붙은 함수를 정의합니다.

#include "MyActor.h"

// Sets default values
AMyActor::AMyActor()
{
    // Set this actor to call Tick() every frame.
    PrimaryActorTick.bCanEverTick = true;
}

// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
    Super::BeginPlay();
    
}

// Called every frame
void AMyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);

}

// Define the native implementation of MyFunction
void AMyActor::MyFunction_Implementation()
{
    // Default implementation in C++
    UE_LOG(LogTemp, Warning, TEXT("MyFunction called in C++"));
}

 

 

블루프린트에서 오버라이드

  1. Unreal Engine 에디터에서 AMyActor의 블루프린트 클래스를 생성합니다.
  2. 생성된 블루프린트 클래스를 열고, Functions 목록에서 MyFunction을 찾습니다.
  3. MyFunction을 선택하고, 블루프린트에서 이를 오버라이드하여 새로운 동작을 정의합니다.

이렇게 하면 MyFunction을 C++에서 기본 구현을 제공하면서 블루프린트에서도 오버라이드할 수 있습니다.