•
HelloStove프로젝트의 StovePCSDK_UNREAL폴더 안에 STOVE PC SDK인 StovePCSDK_UNREAL_x.x.x.zip파일 압축을 해제하면 보이는 Plugins 폴더를 HelloStove프로젝트에 복사하여 하단 그림과 같이 HelloStove_Unreal을 빌드할 수 있는 상태로 구성합니다.
1. UNREAL Plugin 폴더 구성하기
HelloStove.uproject를 더블클릭하면 UNREAL리빌드를 할것인지 선택창이 나오고(UNREAL버전에 따라 엔진버전 선택창이 먼저 표시될 수 있습니다) 여기서 예(Y)를 선택하면 해당폴더에 Binaries, Intermediate, Saved등의 부수적인 폴더가 생성됩니다. 부수적인 폴더 생성 후에 최종적으로 UNREAL에디터가 자동실행됩니다.
2. VisualStudio 솔루션 생성하기
UNREAL빌드가 정상적으로 완료되었다면 UNREAL에디터를 이용하여 HelloStove.sln을 생성합니다. HelloStove.uproject를 마우스 우측 클릭해서 Visual Studio 솔루션을 생성할 수 있습니다.
Unreal 버전에 따라 HelloStove.sln 파일이 먼저 생성되어 있을 수 있습니다.
3. Visual Studio 솔루션에서 StovePCSDKPlugin 구성하기
Visual Studio 솔루션 파일 생성까지 완료하였다면 HelloStove 프로젝트에서 Plugin을 연동하기 위한 다음 순서의 작업이 필요합니다.
3.A. StoveSDK_Unreal 빌드 모듈 구성하기
HelloStove 프로젝트(HelloStove_Unreal 폴더)에서 Plugin 모듈을 인식하기 위해 HelloStove.uproject 와 HelloStove.Build.cs 파일에 모듈이름 종속성을 추가합니다.
HelloStove.sln파일을 더블클릭하여 Visual Studio를 실행하고 솔루션 탐색기에서 HelloStove.uproject 파일을 열어서 Plugin의 명칭인 StoveSDKPlugin를 “AdditionalDependencies”항목 안에 아래 코드와 같이 추가합니다.
HelloStove.uproject
{
"FileVersion": 3,
"EngineAssociation": "4.21",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "HelloStove",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"UMG",
"Engine",
"CoreUObject",
"StoveSDKPlugin"
]
}
]
}
C++
복사
HelloStove.Build.cs에는 Plugin을 UNREAL엔진에 임포트하기 위해 StoveSDKPlugin를 각각 아래 코드와 같이 PublicDependencyModuleNames과 PrivateDependencyModuleNames 모듈에 추가(AddRange)합니다.
HelloStove.Build.cs
using UnrealBuildTool;
public class HelloStove : ModuleRules{
public HelloStove(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Projects", "StoveSDKPlugin" });
PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Projects", "StoveSDKPlugin" });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}
}
C#
복사
3.B. UMyStoveSDKObject 의 부모클래스 변경하기
위 단계를 통해 Plugin의 빌드 모듈 종속성이 추가 되었다면 스토브 SDK 함수를 사용하기 위해 파생클래스(derived class)인 UMyStoveSDKObject 의 부모클래스 (parent class) 를 기존 UStoveSDKEmptyObject클래스 에서 신규 UStoveSDKObect클래스로 변경합니다.
부모클래스 변경 전에 UMyStoveSDKObject클래스는 스켈레톤 클래스인 UStoveSDKEmptyObject를 상속 받고 있지만 어떠한 기능도 동작하지 않습니다. Plugin의 모든 기능을 사용하기 위해서는 헤더파일 StoveSDKObject.h를 포함(include)하고 UStoveSDKObect 클래스를 새로 상속하도록 변경해야 합니다.
Before
#pragma once#include "CoreMinimal.h"#include "StoveSDKEmptyObject.h"#include "MyStoveSDKObject.generated.h"DECLARE_DELEGATE_OneParam(FDele_Delegate_Log, FString);
UCLASS()
class HELLOSTOVE_API UMyStoveSDKObject : public UStoveSDKEmptyObject
{
GENERATED_BODY()
protected:
// Called when the game starts or when spawned
...
C++
복사
After
#pragma once#include "CoreMinimal.h"#include "StoveSDKObject.h"#include "MyStoveSDKObject.generated.h"DECLARE_DELEGATE_OneParam(FDele_Delegate_Log, FString);
UCLASS()
class HELLOSTOVE_API UMyStoveSDKObject : public UStoveSDKObject
{
GENERATED_BODY()
protected:
// Called when the game starts or when spawned
...
C++
복사
부모클래스 변경이 완료된 후, StoveSDKEmptyObect.h를 프로젝트에서 삭제하거나 헤더를 주석처리만 해도 빌드는 문제없이 진행 됩니다.
3.C. UMyGameInstance에서 UMyStoveSDKObect 멤버변수 생성
HelloStove의 UMyGameInstance 에 /*remark delete*/ 로 표시된 아래코드의 주석을 제거합니다.
•
UMyGameInstance.h
#include "CoreMinimal.h"#include "Engine/GameInstance.h"/*remark delete*/
/*#include "MyStoveSDKObject.h"*/
#include "MyGameInstance.generated.h"UCLASS()
class HELLOSTOVE_API UMyGameInstance : public UGameInstance
{
GENERATED_BODY()
public:
UMyGameInstance()
{
/*remark delete*/
/*_stoveSDKObject = NewObject<UMyStoveSDKObject>();*/
}
private:
/*remark delete*/
/*UPROPERTY()
UMyStoveSDKObject* _stoveSDKObject;*/
};
C++
복사
3.D. MyUserWidget의 버튼 이벤트 연결
HelloStove프로젝트에는 Plugin API(STOVE SDK)를 테스트하기 위한 버튼이 준비되어 있습니다. Plugin을 연동하고 버튼 이벤트와 연결하기 위해 UMyHelloStoveWidget클래스의 /*remark delete*/ 로 표시된 아래코드의 주석을 제거합니다.
UMyHelloStoveWidget.cpp
/*remark delete*/
/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
stoveSDKObject->_OnDeleLog.BindUObject(this, &UMyHelloStoveWidget::OnEventLog);*/
void UMyHelloStoveWidget::OnClickInit()
{
/*remark delete*/
/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
stoveSDKObject->StoveSDKInit(FStoveConfig{});*/
}
void UMyHelloStoveWidget::OnClickToken()
{
/*remark delete*/
/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
stoveSDKObject->StoveSDKGetToken();*/
}
void UMyHelloStoveWidget::OnClickUser()
{
/*remark delete*/
/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
stoveSDKObject->StoveSDKGetUser();*/
}
void UMyHelloStoveWidget::OnClickUnInit()
{
/*remark delete*/
/*auto stoveSDKObject = Cast<UMyStoveSDKObject>(FindStoveSDKObject());
stoveSDKObject->StoveSDKUnInit();*/
}
C++
복사
4. VisualStudio 솔루션에서 UNREAL 에디터 실행하기
이제까지 모든 과정을 순차적으로 따라했다면 Visual Studio 빌드옵션에서 DevelopmentEditor 와 Win64 항목이 선택된 상태로 디버거 모드로 실행합니다. 솔루션 빌드가 완료되고 UNREAL에디터가 순차적으로 실행되면서 UNREAL에디터 메인 화면이 나타나면, 플러그인이 정상으로 연동된 것입니다.
만약 솔루션 빌드 시에 에러가 발생하는 경우, 출력로그창에서 에러 메시지를 확인하고 #프로젝트 환경 구성하기 전체과정을 재검토하고 에러를 수정합니다. 에러 수정 후에는 HelloStove 프로젝트를 다시 빌드해서 에러없이 UNREAL에디터가 실행되는지 확인합니다.
UNREAL에디터 툴바에 있는 플레이버튼을 눌러 아래 화면처럼 HelloStove 프로젝트의 버튼들이 정상적으로 표시되는지 확인합니다.