어두운 배경이 싫으시다면 페이지 우측 하단에 보이는 초승달 모양의 아이콘을 클릭하면 화이트모드로 변경됩니다. 초승달 모양 버튼 : `화이트/다크 모드` 전환 |
이전 포스팅에 이어서 마지막으로 작업한 모듈을 다시 원상 복구한 뒤에 패키징하여 외부에서 사용하는 방법에 대해서 설명하겠습니다. 혹시 이전 포스팅을 안 보신 분들은 아래 링크를 통해 프로젝트와 플러그인 작업을 마치신 뒤에 해당 과정을 진행하시길 바랍니다.
🔸플러그인 생성하기
🔸플러그인 모듈 분리작업
1. 플러그인 모듈 이식
이전 포스팅을 통해 모듈 작업을 완료하였다면 이제 다시 원래 플러그인을 만들었던 프로젝트에 넣습니다.
※ 혹시라도 프로젝트를 지웠다면 제가 작성한 첫 번째 플러그인 생성 부분을 수행하시면 되고, Plugins 폴더만 지우신 경우 에디터에서 플러그인 생성을 다시 해주시면 됩니다.
옮긴다음 .uproject의 'Generate Visual Studio project files'를 수행합니다.
2. 소스코드 수정하기
솔루션 파일을 실행하여 Visual Studio를 띄웁니다. 이제 수정했던 모듈 소스의 코드를 다시 원래대로 복구합니다. 아래는 해당 코드들입니다.
// 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");
기존에 주석을 했던 내용을 풀어주면 되며, 특히 cpp 파일의 `IMPLEMENT_MODULE` 주석 부분을 해제하면서 `IMPLEMENT_PRIMARY_GAME_MODULE` 이 부분은 주석처리합니다.
그리고 플러그인의 'PrintOutTest.uplugin' 파일을 보면 아래와 같이 `"Modules"` 부분을 수정합니다. `"WhitelistPlatforms"`를 추가현 됩니다. 바로 위쪽에 콤마(,) 붙여주셔야 합니다.
"Modules": [
{
"Name": "PrintOutTest",
"Type": "Runtime",
"LoadingPhase": "Default",
"WhitelistPlatforms": [
"Win64"
]
}
]
해당 문구는 이 플러그인을 추후 패키징할 것인데, 어떤 플랫폼에서 동작하는 지를 명시하면서 해당 플랫폼에서 구동할 수 있도록 라이브러리를 생성합니다. 이를 위해서는 각 플랫폼에 맞는 SDK들이 있어야 합니다. 모바일인 경우 iOS나 Android, 같이 플랫폼을 명시하면 그에 해당하는 SDK가 PC에 설치되어 있어야 합니다.
※ 참고로 언리얼 5부터는 `Win32`를 더 이상 지원하지 않으므로, 명시하더라도 라이브러리를 생성하지 않습니다. 아래는 언리얼 Document의 링크로 해당 내용을 '개발 플랫폼 변경'에서 확인하실 수 있습니다.
이제 프로젝트를 빌드하고 정상적으로 빌드가 완료되었으면 에디터를 실행합니다. 에디터를 실행하면 콘텐츠 브라우저에 플러그인 모듈이 나타납니다.
3. 패키징
이제 플러그인을 패키징 하기 위해 플러그인 브라우저를 띄웁니다. 그리고 아래와 같이 플러그인이 보일 것이고, '패키지'를 클릭하여 패키징을 실행합니다. 그러면 패키징 결과물을 어디에 보관할지 경로를 지정합니다. 해당 경로에 플러그인 이름(여기서는 PrintOutTest)으로 생성합니다.
플러그인 패키징 과정이 끝나면 해당 경로에 플러그인이 있고, 여기에 Binaries 폴더에 보면 지정한 플랫폼의 라이브러리 폴더가 보입니다.
※ 만약 패키징이 실패하였다면 본인 .uplugin 부분이 수정이 잘못되었을 가능성이 있으니 확인 바랍니다. SDK 문제는 애초에 프로젝트 생성단계부터 문제가 생기기 때문에 이쪽 문제는 아닙니다.
4. 외부 프로젝트에서 사용하기
이제 패키징 한 플러그인을 외부의 다른 프로젝트에서 사용하는 방법에 대해서 설명하겠습니다. 다른 플러그인을 사용하는 방법은 크게 2가지가 있습니다. 이 부분들에 대해서 설명하겠습니다.
먼저 외부 플러그인을 사용하기 위해 프로젝트를 하나 생성하겠습니다. 이름은 'AnotherProject'로 하였고, 이번에는 '블루프린트' 프로젝트입니다. 플러그인을 작업하는 것이 아닌 사용하기 위한 프로젝트이므로 어떤 타입이든 상관없습니다.
🟦 프로젝트에 개별로 추가하기
프로젝트를 만들었으면 에디터를 종료한 뒤, 패키징한 플러그인을 복사하여 프로젝트 폴더 안에 'Plugins' 폴더를 만들고 거기에 복사한 플러그인(PrintOutTest)을 넣습니다.
플러그인을 넣은 뒤, 에디터를 실행합니다. 그리고 플러그인 브라우저를 들어가서 보면 '설치됨'의 'other'에 보면 추가된 'PrintOutTest' 플러그인이 보일 겁니다. (체크가 되어 있으면 사용 가능, 체크가 해제되어 있으면 체크하고 에디터 재시작) 플러그인에 있는 모듈 에셋을 사용하는 방법은 이전에 한 것과 같습니다.
이렇게 하면 다른 프로젝트에서는 사용할 수 없고, 해당 프로젝트 전용으로만 사용가능한 플러그인입니다.
🟦 엔진의 마켓플레이스 폴더 활용
다른 방법으로는 모든 프로젝트에서 공용으로 사용하는 방법입니다. 마찬가지로 플러그인(PrintOutTest)을 복사합니다. 그리고 엔진이 설치된 경로로 이동합니다. 여기에 설치한 엔진 버전(저는 5.4) 폴더 아래 [Engine] - [Plugins] - [Marketplace] 폴더에 복사한 플러그인을 붙여 넣기 합니다.
그리고 이전에 생성했던 프로젝트(AnotherProject)의 Plugins 폴더를 지웁니다. 에디터를 실행해서 플러그인 브라우저를 보면 이전과 마찬가지로 'PrintOutTest' 모듈이 나타납니다. 이번에는 체크가 안 되어 있을 텐데, 체크를 하면 아래에 에디터를 재시작할지 물어봅니다. 버튼을 눌러 에디터를 재시작합니다.
이전 방식과 다르게 플러그인 아래 '편집'이나 '패키지'가 안 뜹니다. 이는 엔진에 이미 포함된 상태로 따로 수정하거나 빌드, 패키징을 하지 못하게 한 것입니다.
재시작해도 콘텐츠 브라우저에 'PrintOutTest' 모듈의 클래스가 보이지 않는다면, 아래 이미지처럼 콘텐츠 브라우저의 '세팅'을 누르면 나타나는 팝업 메뉴에서 '엔진 콘텐츠 표시'를 체크합니다. 그러면 엔진에 설치된 플러그인들이 콘텐츠 브라우저에 나타납니다.
콘텐츠 브라우저의 [엔진] - [Plugins] 에서 우측 검색바에 방금 추가한 플러그인의 이름을 검색하면 아래와 같이 해당 클래스가 나타납니다. 이렇게 해서 플러그인의 클래스를 사용할 수 있습니다.
이상 플러그인을 패키징하고 외부 프로젝트에서 사용하는 방법에 대해서 설명하였습니다.
구독 및 좋아요는 컨텐츠를 생산하는데 많은 도움이 됩니다. 😊
감사합니다.