언리얼 C++ 프로그래밍

[언리얼 C++] 블루프린트 펑션 라이브러리

언린이 2021. 6. 23. 22:04

언리얼 엔진을 통해 개발을 하면 종종 자신이 구현한 함수를 C++ 클래스에서 뿐만 아니라 블루프린트에서도 사용하고 싶은 욕구가 생기기 마련입니다. 이를 위해서 언리얼 엔진은 UFUNCTION() 매크로를 제공해줍니다.

 

UCLASS()
class SampleTest
{
    GENERATED_UCLASS_BODY()
    
    UFUNCTION(BlueprintCallable)
    void SampleFunction();
}

 

이처럼 함수의 선언부에서 UFUNCTION(BlueprintCallable) 매크로를 사용하여 함수를 선언해주면 해당 SampleFunction() 함수는 블루프린트에서도 사용할 수 있습니다.

 

 

하지만 위의 예제처럼 게임 오브젝트에 종속되어 있는 함수는 해당 오브젝트를 통해서만 호출할 수 있습니다.

공유 유틸리티 함수를 블루프린트에 노출시키려는 경우, 특정 게임 오브젝트 유형에 묶지 않는 것이 좋습니다. 이러한 경우를 위해, 언리얼 엔진에서는 블루프린트 펑션 라이브러리를 제공해 주고 있습니다.

 

블루프린트 펑션 라이브러리는 특정 게임 오브젝트에 묶이지 않은 유틸리티 함수성을 제공해 주는 정적인 함수의 모음입니다. 모든 블루프린트 라이브러리는 UBlueprintFunctionLibrary를 상속합니다.

 

UCLASS()
class UAnalyticsBlueprintLibrary : public UBlueprintFunctionLibrary
{
    GENERATED_UCLASS_BODY()
    
    UFUNCTION(BlueprintCallable, Category="Analytics")
    static bool StartSession();
}

위 예제에서 볼 수 있듯이, 블루프린트 펑션 라이브러리는 간접적으로 UObject에서 파생되었기 때문에 표준 UCLASS() 및 GENERATED_UCLASS_BODY() 매크로가 필요합니다. 블루프린트에서 호출 가능하게 만들 함수를 UFUNCTION() 매크로를 사용하여 선언해주기도 합니다.

이에 대한 소스 코드는 /UE4/Engine/Plugins/Runtime/Analytics/AnalyticsBlueprintLibrary를 참고하시면 됩니다.

 

 

끝으로 흔히 사용되는 블루프린트 펑션 라이브러리 함수 예제를 보여드리겠습니다.

AAIController* UAIBlueprintHelperLibrary::GetAIController(AActor* ControlledActor)
{
    APawn* AsPawn = Cast<APawn>(ControlledActor);
    if (AsPawn != nullptr)
    {
        return Cast<AAIController>(AsPawn->GetController());
    }
    return Cast<AAIController>(ControlledActor);
}

위의 예제는 액터에 대한 AIController를 찾는 함수입니다.