[Unreal Engine] 언리얼 엔진 모듈

김민정·2025년 4월 29일

UnrealEngine

목록 보기
7/10

Unreal Engine 문서로 언리얼 엔진 모듈을 공부한 내용입니다.

참고 자료

언리얼 엔진 모듈

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-engine-modules

언리얼 엔진에서 게임플레이 모듈 생성

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


모듈이란?

  • 특정 에디터 툴, 런타임 기능, 라이브러리 등의 기능을 독립된 코드 단위로 캡슐화한 것

모듈 사용의 이점

  • 적절한 코드 분리를 강제하여 함수 기능을 캡슐화하고 코드의 내부를 숨길 수 있다.
  • 각기 다른 컴파일 유닛으로, 변경된 모듈만 컴파일하기에 빌드 시간이 단축된다.
  • 모듈 간의 관계는 연결되며, 실제로 사용하는 타입만 헤더에 include한다. (컴파일 하는 동안 사용하지 않는 모듈은 Build.cs에서 안전하게 제거할 수 있다.)
  • 런타임 시 모듈의 로드 및 언로드 시간을 조절해 퍼포먼스를 최적화할 수 있다.
  • 프로젝트를 컴파일할 플랫폼 등 특정 조건에 따라 모듈을 포함하거나 제외할 수 있다.

모듈 구성하기


1. 프로젝트의 Source 폴더에 생성하려는 모듈 이름(ModuleTest)으로 폴더를 생성한다.

using UnrealBuildTool;

public class ModuleTest : ModuleRules
{
    public ModuleTest(ReadOnlyTargetRules Target) : base(Target)
    {
        PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine" });
    }
}
  1. 모듈의 루트 디렉터리에 {모듈 이름}.Build.cs 파일을 생성하고, 다른 모듈과의 종속성을 정의한다. 종속성을 정의하면 언리얼 빌드 시스템에서 모듈을 파악할 수 있다.
#include "Modules/ModuleManager.h"

IMPLEMENT_MODULE(FDefaultModuleImpl, ModuleTest);
  1. 모듈의 루트 디렉터리에 Private와 Public 폴더를 생성하고, Private 폴더 안에 {모듈 이름}Module.cpp 파일을 생성한 후 위 코드를 추가한다. 매크로를 통해 모듈의 디폴트 구현을 할 수 있다.
"Modules": [
		{
        	// 기본으로 생성되는 모듈
			"Name": "ModulePractice",
			"Type": "Runtime",
			"LoadingPhase": "Default"
		},
        
		{
        	// 추가한 모듈
			"Name": "ModuleTest",
			"Type": "Runtime"
			]
		}
	],
  1. 모듈을 프로젝트에 포함하기 위해 .uproject 파일의 Modules 목록을 위와 같이 편집한다.
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "ModuleTest" });
  1. 새로 만든 모듈(ModuleTest)을 사용할 모듈의 Build.cs 파일에서 추가할 모듈 이름을 PublicDependencyModuleNames 목록에 나열한다.

모듈에 코드 추가

  1. 언리얼 에디터의 Tool 탭에서 New C++ Class를 선택한다.


2. 해당 클래스를 추가하고자 하는 모듈을 선택한다.

모듈 폴더 구조

{ModuleName}
↳ Private
    ↳ {ModuleName}Module.cpp
    ↳ 모든 cpp 파일 및 프라이빗 헤더
↳ Public
    ↳ 모든 퍼블릭 헤더
↳ {ModuleName}.Build.cs

Build.cs 파일에서 종속성 설정

  • 언리얼 빌드 시스템은 IDE 솔루션 파일과는 별개로 동작한다. 언리얼 빌드 시스템에서 솔루션을 인식하도록 하려면 모든 모듈의 루트 디렉터리에 {ModuleName}.Build.cs 파일을 배치해야 한다.
  • {ModuleName}.Build.cs 파일 내에서는 모듈을 ModuleRules 클래스에서 상속받은 클래스로 정의해야한다.

프라이빗 및 퍼블릭 종속성

  • 헤더 파일에서 모듈에 있는 클래스를 사용할 경우 PublicDependencyModuleNames 목록에 사용하고자 하는 모듈을 추가한다.
  • cpp 파일처럼 내부에서만 사용할거라면 PrivateDependencyModuleNames에 목록에 추가한다. (가능한 Private로 추가하는게 컴파일 성능에 유리하다.)

Private 및 Public 폴더 사용하기

  • cpp 파일은 Private 폴더에 배치되어야 한다.
  • 헤더 파일을 Public 폴더에 배치하면 다른 모듈의 클래스에서 사용할 수 있고, Private 폴더에 배치하면 사용할 수 없다. (Public 폴더는 외부 모듈에서 쓸 수 있는 인터페이스 느낌)

C++에서 모듈 구현하기

  • 모듈을 노출하려면 IModuleInterface를 확장한 클래스를 들어야 하는데, IMPLEMENT_MODULE 매크로를 호출하여 FDefaultModuleImpl을 클래스로 제공하면 간단하게 구현할 수 있다.

프로젝트에 모듈 사용하기

  • 프라이머리 모듈의 Build.cs 파일에 추가하여 플러그인이나 다른 자체 모듈을 프로젝트에 포함할 수 있다.

모듈 로드 방식 제어하기

  • .uproject 및 .uplugin 파일에는 프로젝트에 포함할 모듈과 로드 방식을 정의하는 Modules 목록이 존재한다. 프로젝트 파일을 재생성할 때 모듈에 대한 항목이 존재하지 않을 경우, 해당 항목을 목록에 자동으로 추가한다.
  • 가장 흔한 타입으로는 Runtime과 Editor가 있는데, 이는 각각 인게임 클래스와 에디터 전용 클래스에 사용된다.
  • 로딩 페이즈를 따로 정의해두지 않으면 Default로 설정된다.
profile
📝 공부노트

0개의 댓글