어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다. 초승달 모양 버튼 : `화이트/다크 모드` 전환 |
이전 포스팅에서는 아주 간단하게 플러그인을 생성하고 그 안에 C++ 클래스를 만들어서 로그를 출력해 보았습니다. 혹시 이전 과정을 수행하지 않으셨으면 아래 링크를 통해 선행작업을 하고 이번 포스팅을 연속해서 진행해주시면 됩니다.
🔸 이전글 : 플러그인 생성하기
이번 포스팅에서는 이전에 만든 플러그인의 모듈을 새로운 프로젝트에 넣어서 모듈 작업을 하는 부분에 대해서 설명하겠습니다.
1. 모듈 작업을 위한 프로젝트 생성
플러그인 모듈을 별도의 작업을 하기 위해서 새로운 프로젝트를 만들어서 해당 프로젝트에 플러그인 모듈을 프로젝트 모듈로 추가하여 작업해 보겠습니다.
프로젝트는 아래와 같이 'PluginModuleWorkshop'이라는 이름으로 새 프로젝트를 만들었습니다. 이름은 본인이 편하게 만드셔도 상관없습니다. 지금 하려는 것은 프로젝트 모듈이 아닌 '플러그인 모듈'의 수정작업이므로 프로젝트 이름은 마음대로 지으셔도 됩니다.
프로젝트 생성 후 라이브코딩은 비활성화합니다. 그리고 플러그인 모듈을 넣어야 하므로 에디터는 종료합니다.
2. 플러그인의 모듈 분리
이전에 작업했던 프로젝트(MakePlugin)에서 'PrintOutTest' 모듈을 잘라내기 한 뒤, 방금 만든 'PluginModuleWorkshop'의 Source 폴더에 넣습니다.
추가한 모듈이 Visual Studio 프로젝트에서도 볼 수 있게 .uproject 파일을 우클릭하여 'Generate Visual Studio project files'를 수행합니다. 그리고 .sln 파일을 실행하여 Visual Studio로 이동합니다. Visual Studio가 뜨면 '솔루션 탐색기'에 방금 붙여넣기한 플러그인 모듈(PrintOutTest)가 보일 겁니다.
3. 모듈 소스 작업
이제 추가한 모듈을 프로젝트에서 사용할 수 있도록 코드 수정 작업을 하겠습니다. 먼저 프로젝트의 'Target.cs' 파일 두 개를 수정해야 합니다. 아래 코드를 참고하여 ModuleName을 수정합니다.
기존의 'ExtraModuleNames'는 프로젝트의 모듈만 추가하였는데, 방금 추가한 'PrintOutTest' 모듈도 추가하기 위해서 아래와 같이 수정합니다.
// PluginModuleWorkshop.Target.cs
public PluginModuleWorkshopTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_4;
//ExtraModuleNames.Add("PluginModuleWorkshop");
ExtraModuleNames.AddRange(new string[] { "PluginModuleWorkshop", "PrintOutTest" });
}
// PluginModuleWorkshopEditor.Target.cs
public PluginModuleWorkshopEditorTarget( TargetInfo Target) : base(Target)
{
Type = TargetType.Editor;
DefaultBuildSettings = BuildSettingsVersion.V5;
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_4;
//ExtraModuleNames.Add("PluginModuleWorkshop");
ExtraModuleNames.AddRange(new string[] { "PluginModuleWorkshop", "PrintOutTest" });
}
이번에는 .uproject의 내용을 수정하겠습니다. 아래와 같이 "Modules" 안에 방금 추가한 PrintOutTest를 연결하는 작업을 수행합니다. 이때 중괄호 {} 사이에 콤마(,)를 빼먹지 않도록 주의하시길 바랍니다.
"Modules": [
{
"Name": "PluginModuleWorkshop",
"Type": "Runtime",
"LoadingPhase": "Default"
},
{
"Name": "PrintOutTest",
"Type": "Runtime",
"LoadingPhase": "Default"
}
],
이번에는 플러그인 모듈인 PrintOutTest의 헤더(.h)와 소스파일(.cpp)을 수정하겠습니다. 기존 코드 내용은 플러그인 안에 있을 때 프로젝트에 연결 및 해제에 대한 내용이라면 이제는 프로젝트에 직접적인 연결을 위한 코드로 변경하여야 합니다.
아래 헤더파일과 소스파일 코드 내용으로 수정해 주시면 됩니다.
// PrintOutTest.h
#pragma once
//#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
//class FPrintOutTestModule : public IModuleInterface
//{
//public:
//
// /** IModuleInterface implementation */
// virtual void StartupModule() override;
// virtual void ShutdownModule() override;
//};
// PrintOutTest.cpp
#include "PrintOutTest.h"
//#define LOCTEXT_NAMESPACE "FPrintOutTestModule"
//
//void FPrintOutTestModule::StartupModule()
//{
// // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
//}
//
//void FPrintOutTestModule::ShutdownModule()
//{
// // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
// // we call this function before unloading the module.
//}
//
//#undef LOCTEXT_NAMESPACE
//IMPLEMENT_MODULE(FPrintOutTestModule, PrintOutTest)
IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, PrintOutTest, "PrintOutTest");
여기까지 하면 모듈 연결작업은 끝납니다. 프로젝트를 빌드하시고 성공하면 에디터를 실행합니다. 그러면 아래와 같이 콘텐츠 브라우저에 방금 연결한 'PrintOutTest' 모듈과 'C++ 클래스' 부분이 나오는 것을 볼 수 있습니다.
4. 플러그인 모듈의 액터 수정
기존에 만들었던 'PrintActor' 클래스를 수정하고 해당 내용이 제대로 적용되는지 확인해 보겠습니다. 이전과 다른 점은 에디터를 끄지 않고 작업해도 됩니다. 지금 우리는 플러그인을 수정하는 것이 아닌 프로젝트 모듈을 수정하는 것이기 때문에 해당 프로젝트를 연결한 에디터에서 컴파일 내용을 '핫 리로드'를 통해 실시간으로 반영하게 됩니다.
아래 코드를 PrintActor의 `BeginPlay()` 함수에 추가합니다. GEngine 클래스를 사용하기 위해서는 `#include "Engine/GameEngine.h"` 헤더를 포함해야 합니다. 그리고 `UE_LOG()` 매크로의 `Warning`을 `Error`로 변경합니다. 프로젝트 빌드를 하면 자동으로 에디터에서 핫 리로드로 컴파일된 라이브러리가 자동으로 링크됩니다.
#include "Engine/GameEngine.h"
// Called when the game starts or when spawned
void APrintActor::BeginPlay()
{
Super::BeginPlay();
// 화면과 출력 로그에 각각 텍스트 출력
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("Error!!"));
UE_LOG(LogTemp, Error, TEXT("Print Out Plugin Test!"));
}
그리고 'PrintActor'를 레벨에 올려놓고 실행하면 아래와 같이 Viewport와 출력로그에 각각 텍스트가 출력되는 것을 볼 수 있습니다.
이렇게 플러그인의 모듈을 따로 빼서 프로젝트에 연결하여 작업한 뒤, 작업이 마무리되면 해당 모듈을 다시 플러그인에 넣고 플러그인을 패키징 해서 외부에서 사용할 수 있게 만듭니다.
이번 포스팅은 여기까지이고, 다음 포스팅에서 위에서 말한 플러그인에 작업한 모듈을 다시 넣고 패키징까지 해서 외부 프로젝트에서 사용하는 방법을 설명하겠습니다.
🔸플러그인 패키징 및 외부 프로젝트에서 사용하기
구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊
감사합니다.