언리얼 Blueprint Function Library를 사용하여 정수배열을 정렬하는 예
테스트 환경
- Visual Studio C++
- Unreal Engine 4
블루프린트 프로젝트를 생성한다
Content Browser에서 마우스 우측 > 새 C++ 클래스 > 부모클래스 선택 창에서 [모든 클래스] 항목에 체크하고 Blueprint Function Library 클래스를 검색하여 선택한다. 파일이름을 디폴트로 두고 [선택] 버튼을 누르면 잠시 후 Visual Studio 가 실행되고 헤더파일과 소스파일이 생성된다.
헤더파일과 소스파일에 아래의 내용을 추가하여 저장하고 빌드할 필요는 없다. 언리얼 에디터의 툴바에서 [컴파일] 버튼을 누르면 C++ 컴파일이 시작되고 그 결과 완료 혹은 실패 메시지가 나타난다. 문법적인 오류가 없다면 컴파일에 성공할 것이다.
헤더파일에 다음과 같이 선언한다(적색 부분은 디폴트 내용에 새로 추가된 내용)
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"
UCLASS()
class BP_CPP_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
UFUNCTION(BlueprintCallable, Category="TestFunction")
static TArray<int32> sort(TArray<int32> arr);
};
소스파일에 다음과 같이 선언한다(적색 부분은 디폴트 내용에 새로 추가된 내용)
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyBlueprintFunctionLibrary.h"
TArray<int32> UMyBlueprintFunctionLibrary::sort(TArray<int32> arr)
{
int tmp = 0;
for (int i = 0; i < arr.Num() - 1; i++) {
for (int j = i + 1; j < arr.Num(); j++) {
if (arr[i] > arr[j]) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return arr;
}
위에서 생성한 C++ 함수는 언리얼 엔진의 블루프린트 그래프에서 함수노드를 이용하여 사용할 수 있다.
C++의 Object 파생클래스를 블루프린트에서 사용하는 예
블루프린트 프로젝트에서 C++ Object 파생클래스를 작성하는 절차는 위와 동일하지만 부모 클래스를 Object 로 설정하며 코드 상에서 UCLASS() 매크로를 추가하고 블루프린트에서 Construct Object from Class 노드를 사용하여 파생 클래스의 인스턴스를 생성한다는 점이 다르다
BlueprintFunctionLibrary 파생클래스를 사용하지 않고 Object 파생클래스를 사용해도 된다. BlueprintFunctionLibrary 도 아니고 Actor도 아닌 Object 파생클래스를 C++에서 작성하고 블루프린트에서 사용하려면 클래스 선언문 위에 UCLASS(Blueprintable, BlueprintType) 매크로를 추가해야 하며, 블루프린트에서 호출하려면 Construct Object from Class 노드를 사용하면 된다
Object 파생클래스의 헤더파일 (적색 부분은 Visual Studio에서 추가한 내용)
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "VarTest.generated.h"
/**
*
*/
UCLASS(Blueprintable, BlueprintType)
class CONTAINERTESTMAP_API UVarTest : public UObject
{
GENERATED_BODY()
UFUNCTION(BlueprintCallable, Category = "VarTest")
TArray<int> sort(TArray<int> arr);
};
Object 파생클래스의 소스파일 (적색 부분은 Visual Studio에서 추가한 내용)
// Fill out your copyright notice in the Description page of Project Settings.
#include "VarTest.h"
TArray<int> UVarTest::sort(TArray<int> arr)
{
for (int i = 0; i < arr.Num()-1; i++)
{
for (int j = i + 1; j < arr.Num(); j++)
{
if (arr[i] > arr[j])
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
return arr;
}
Visual Studio에서 위처럼 작성했다면 저장하고 언리얼 에디터의 툴바에서 [컴파일]을 눌러 컴파일을 마치면 블루프린트에서 다음과 같이 Construct Object from Class 노드를 사용하여 인스턴스를 생성하고 그 멤버함수를 호출할 수가 있다