본문 바로가기

개발/언리얼

언리얼 모듈 추가하기

아쉽게도 언리얼 에디터 UI에서 모듈을 생성하는 기능은 제공하지 않는다.

공식문서의 절차를 따라서 모듈을 생성해보자.

https://dev.epicgames.com/documentation/unreal-engine/how-to-make-a-gameplay-module-in-unreal-engine?lang=ko

 

How To Make a Gameplay Module in Unreal Engine | Unreal Engine 5.8 Documentation | Epic Developer Community

Learn how to create a runtime module for your Unreal Engine game from scratch.

dev.epicgames.com

 

 

파일 탐색기로 언리얼 프로젝트 폴더에 접근하여 Source폴더 아래에 원하는 모듈명으로 폴더를 생성하고,

내부에 Public, Private폴더와 [모듈명].build.cs파일, [모듈명]module.cpp파일을 생성한다

원하는 이름의 모듈 폴더 생성
필수적인 폴더,파일 4개 생성

 

.cs파일과 ~Module.cpp파일의 내용물을 다음과 같이 작성한다.

// ModuleTest.build.cs

using UnrealBuildTool;

public class ModuleTest: ModuleRules
{
	public ModuleTest(ReadOnlyTargetRules Target) : base(Target)
	{
		PrivateDependencyModuleNames.AddRange(new string[] {"Core", "CoreUObject", "Engine"});
	}
}

PrivateDependencyModuleNames에는 기존 프로젝트처럼 해당 모듈에서 사용할 모듈의 이름을 추가해주면 된다.

해당 코드가 존재해야 UBT(언리얼 빌드 툴)이 모듈을 인식할 수 있다. 

 

// ModuleTestModule.cpp

#include "Modules/ModuleManager.h"

IMPLEMENT_MODULE(FDefaultModuleImpl, ModuleTest);

해당 코드가 존재해야 언리얼 엔진에서 모듈을 로드/언로드가 가능해진다.

파일명이 [모듈명]Module.cpp인데 공식문서는 다음과 같이 설명한다

[모듈 이름]Module은 언리얼 엔진 소스 코드에 속한 모듈 구현 파일의 일반적인 명명 규칙입니다.
거대한 코드에서 파일을 추적할 때 유용합니다.

 

모듈을 정의하는 파일명이지 모듈이름이 아니기때문에, 매크로함수의 시그니처에서는 모듈명을 입력하니 햇갈리지 않도록 한다.

 

4개의 파일이 전부 작성되었으면 프로젝트 최상위 폴더의 .uproject파일을 우클릭하고 generate~~ files를 선택한다.

 

여기까지했다면 모듈의 "생성"은 완료되었다.

 

다만 이제 모듈을 "사용"하기위해서는 주 게임 모듈에 추가해주어야한다.

먼저 프로젝트에 추가한 모듈을 포함시키도록 .uproject 파일을 열고, "Modules"부분에 새 모듈을 추가한다.

.uproject 내에 모듈 추가.

 

그리고 주 게임 모듈(기본 프로젝트명 폴더)의 .build.cs파일로 이동하여 새 모듈을 PublicDependencyModuleNames 목록에 추가한다.

우리가 C++에서 Widget을 사용하려면 "UMG"를 추가했던것과 동일하다

// ModuleAndPlugin.build.cs

using UnrealBuildTool;

public class ModuleAndPlugin : ModuleRules
{
	public ModuleAndPlugin(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput",
			//모듈 추가
			"ModuleTest"});
	}
}

 

여기까지 왔다면 사용할 준비는 완료되었다.

빌드하고, 실행하여 UE로 이동하면 콘텐츠 브라우저에서 C++클래스 아래에 새 모듈을 확인할 수 있다!

모듈내에 클래스를 만들고, 사용하는것은 기존과 동일하다.

 

다만 이제 캡슐화 규칙 등에 따라 모듈의존성을 Public/Private설정하는것이 중요한데

cpp에서만 사용하고 .h에서는 전방선언으로 충분한 경우  Private로,

그렇지 않다면 public으로 의존성 선언을 사용하도록 하고 

가능하다면 private의존성으로 설정하는게 좋다고 한다.

 

이는 좀 경험을 쌓아야 적확한 내용 작성이 가능할것으로 보인다..