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++"));
}
블루프린트에서 오버라이드
- Unreal Engine 에디터에서 AMyActor의 블루프린트 클래스를 생성합니다.
- 생성된 블루프린트 클래스를 열고, Functions 목록에서 MyFunction을 찾습니다.
- MyFunction을 선택하고, 블루프린트에서 이를 오버라이드하여 새로운 동작을 정의합니다.
이렇게 하면 MyFunction을 C++에서 기본 구현을 제공하면서 블루프린트에서도 오버라이드할 수 있습니다.
'개발이야기 > 언리얼 c++' 카테고리의 다른 글
언리얼 C++: Lambda와 mutable Lambda의 차이 (0) | 2024.08.06 |
---|---|
언리얼 C++: EnhancedInput 시스템이란? (0) | 2024.06.18 |
언리얼C++: ConstructorHelpers를 사용해 에셋을 로딩해보자 (0) | 2024.06.18 |
unreal VR 패키징 Pico와 Oculus (0) | 2024.06.05 |
언리얼 C++: TScriptInterface (0) | 2024.05.28 |