프로그래밍/언리얼엔진

[언리얼엔진] 플러그인 제작 및 사용법 - 3. 플러그인용 모듈 제작

LeePorter 2022. 1. 27. 19:39

이번 포스팅에서는 플러그인에 들어갈 모듈을 만들고 플러그인에 장착하여 빌드하는 것까지 설명하도록 하겠습니다. 아래 이미지에서 MakePlugin 프로젝트와 Exporter 프로젝트까지 입니다. (패키징 전)

 


먼저 새 프로젝트를 만듭니다. 이름은 MakePluginModule이라고 하겠습니다. C++ 프로젝트이며, 첫 번째 포스팅과 같은 개발 환경입니다. (본인의 개발 환경에 맞춰서 작업하시면 됩니다. 꼭 아래 환경을 맞추실 필요는 없습니다.)

- Windows 10 / Unreal Engine 4.26 / Visual Studio 2017

 

※ 이전 포스팅을 수행하지 않아 TestPlugin이 없는 경우 이전 포스팅을 우선 수행해주시길 바랍니다.

[언리얼엔진] 플러그인 제작 및 사용법 - 1. 생성 및 준비단계

[언리얼엔진] 플러그인 제작 및 사용법 - 2. C++ 클래스 추가


 

언리얼 엔진에서는 모듈을 구성하는 요소로 모듈과 같은 이름의 헤더(.h)와 소스(.cpp), 그리고 빌드시스템(build.cs) 파일이 존재해야 합니다. 그리고 이 파일들은 반드시 'Source' 폴더 아래 해당 모듈 이름의 폴더 안에 존재해야 합니다.

ex) Source > Second > Second.build.cs

 

이전 포스팅에서 만든 플러그인 폴더(Plugins > TestPlugin)안의 'Source'폴더에 있는 'TestPlugin' 모듈 폴더를 잘라내기 후 새로 만든 프로젝트(MakePluginModule)의 'Source' 폴더 안에 붙여넣기합니다.

프로젝트에 모듈 추가하기

 

Source 폴더에는 해당 프로젝트 이름의 모듈(MakePluginModule)과 두 개의 Target.cs 파일이 있습니다. 이 두 타겟 파일을 메모장 혹은 노트패드++와 같은 텍스트 편집기를 열어서 아래와 같이 수정합니다.

ExtraModuleNames.AddRange() 함수 안에 'TestPlugin'만 추가하면 됩니다.

 

※ Visual Studio에서는 추가한 모듈(TestPlugin)을 볼 수 없습니다. .uproject 우클릭하여 'Generate Visual Studio project files'를 수행해야만 Visual Studio를 통해서 TestPlugin 모듈을 볼 수 있습니다.

 

// MakePluginModule.Target.cs

using UnrealBuildTool;
using System.Collections.Generic;

public class MakePluginModuleTarget : TargetRules
{
	public MakePluginModuleTarget( TargetInfo Target) : base(Target)
	{
		Type = TargetType.Game;
		DefaultBuildSettings = BuildSettingsVersion.V2;
		ExtraModuleNames.AddRange( new string[] { "MakePluginModule", "TestPlugin" } );
	}
}
// MakePluginModuleEditor.Target.cs

using UnrealBuildTool;
using System.Collections.Generic;

public class MakePluginModuleEditorTarget : TargetRules
{
	public MakePluginModuleEditorTarget( TargetInfo Target) : base(Target)
	{
		Type = TargetType.Editor;
		DefaultBuildSettings = BuildSettingsVersion.V2;
		ExtraModuleNames.AddRange( new string[] { "MakePluginModule", "TestPlugin" } );
	}
}

 

두 파일을 수정하였으면 저장하시고, 이제 TestPlugin의 헤더와 소스파일을 아래와 같이 수정합니다. 기존의 내용은 주석처리하시고 일부만 수정하시면 됩니다.

// TestPlugin.h

#pragma once

// #include "CoreMinimal.h"
#include "Modules/ModuleManager.h"

// class FTestPluginModule : public IModuleInterface
// {
// public:

	// /** IModuleInterface implementation */
	// virtual void StartupModule() override;
	// virtual void ShutdownModule() override;
// };
// TestPlugin.cpp

#include "TestPlugin.h"

// #define LOCTEXT_NAMESPACE "FTestPluginModule"

// void FTestPluginModule::StartupModule()
// {
	// // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
// }

// void FTestPluginModule::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_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, TestPlugin, "TestPlugin" );

 

헤더에는 ModuleManager.h를 Include하는 부분만 남기고 주석처리, 소스 파일은 'IMPLEMENT_MODULE' 부분을 위와 같이 수정하면 됩니다. 마찬가지로 두 파일을 저장하시고 프로젝트 폴더로 돌아가서 .uproject 파일을 우클릭하여 'Generate Visual Studio project files'를 수행합니다. 그리고 Visual Studio를 실행하고 프로젝트를 빌드합니다.

 

빌드가 성공적으로 수행되었다면 Visual Studio의 솔루션 탐색기에서 .uproject 파일을 선택합니다. 그러면 JSON 형태의 내용들이 보이는데 이것을 아래와 같이 수정합니다. (TestPlugin 모듈 연결하기)

 

{
	"FileVersion": 3,
	"EngineAssociation": "4.26",
	"Category": "",
	"Description": "",
	"Modules": [
		{
			"Name": "MakePluginModule",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		},
		{
			"Name": "TestPlugin",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		}
	]
}

 

"Modules" 안에 TestPlugin을 추가한 것입니다. 이렇게 해야만 프로젝트를 실행했을 때 TestPlugin이 나타납니다. 파일은 저장만 하시면 됩니다.(빌드하실 필요 없습니다.) 저장하신 뒤 프로젝트를 실행하시면 콘텐츠 브라우저를 통해 연결한 TestPlugin 모듈을 확인할 수 있습니다.

 

 

프로젝트 모듈 연결하기

 

TestPlugin의 Public 폴더에 보면 이전 포스팅에서 만든 TestActor가 있을 겁니다. 이것을 레벨에 배치하고 Play버튼을 눌러 실행하시면 화면과 출력 로그에 로그를 출력합니다. 화면에는 지정한 색상(이전 포스팅에서 수정하지 않으셨다면 빨간색)으로 출력될 겁니다. 이제 Visual Studio로 넘어가서 색상을 변경하고 빌드합니다. (Red → Blue / Blue → Red)

 

※ 언리얼 엔진 프로젝트는 계속 실행중인 상태로 둡니다. 종료 안 하셔도 됩니다.

※ 소스코드 수정 후 Visual Studio에서 프로젝트 빌드하셔도 되고, 수정하신 뒤 언리얼 프로젝트 상단 메뉴 중 '컴파일' 버튼 클릭하셔도 됩니다.

 

그리고 빌드하신 뒤 바로 Play버튼을 누르시면 변경한 색상으로 출력되는 것을 확인할 수 있습니다. 이전 포스팅에서 플러그인에 있는 소스코드를 수정해도 바로 적용되지 않아 프로젝트를 종료하고 다시 실행해야 적용되는 문제는 일어나지 않습니다.

 

즉, 해당 프로젝트는 자신이 가진 모듈들을 빌드할때마다 핫리로드를 수행하여 모듈의 변경사항을 에디터에서 바로 적용하여 확인할 수 있습니다.

 

이런식으로 플러그인으로 만들 모듈을 따로 프로젝트에서 작업을 완료하고, 해당 모듈을 때어내어 다른 프로젝트에 만들어 놓은 Plugins 폴더 안에 있는 플러그인의 Source 폴더에 넣고 이것을 빌드 및 패키징을 통해 배포할 수 있는 형태로 만듭니다.

 

정리하면 1️⃣ 모듈을 작업할 프로젝트가 필요하고, 2️⃣ 작업한 모듈을 플러그인으로 만들어주는 패키징용 프로젝트가 필요합니다. 3️⃣ 그리고 최종적으로 패키징된 플러그인을 실제 사용할 프로젝트에 넣어주거나 엔진 플러그인에 추가하여 사용하는 것입니다.

 

2️⃣에 해당하는 부분에 대해서는 다음 포스팅에서 진행하겠습니다.

감사합니다.