[Unreal4] 게임플레이 모듈
엔진 자체가 여러 모듈로 이루어져 있는 것과 마찬가지로, 각 게임은 하나 이상의 게임 플레이 모듈로 이루어져있다. 패키지와 비슷하지만 별도의 패키지 파일이라기 보단 DLL에 가깝다.
모듈 생성
게임 플레이 모듈에 반드시, .h, .cpp, *.Build.cs 파일이 들어있어야 함. 헤더 파일은 모듈 디렉터리의 Public 폴더에 있어야함. 이 파일에는 모듈의 자동 생성 헤더를 포함해서 모듈에 들어있는 클래스를 컴파일하는 데 필요한 헤더 파일 포함
#include "Engine.h"
#include "EnginePrivate.h"
#include "<ModuleName>Classes.h"
IMPLEMENT_PRIMARY_GAME_MODULE 를 사용해서 등록해야함. 그 이후 모듈은 대안으로 IMPLEMENT_GAME_MODULE 매서드를 사용할 수 있음.
#include "<ModuleName>.h"
IMPLEMENT_PRIMARY_GAME_MODULE(<ModuleName>, "<GameName>");
빌드 파일은 게임플레이 모듈의 루트 디렉터리, 즉 [게임명]\Source[모듈명]에 들어가며, UnrealBuildTool이 모듈을 컴파일하는 데, 사용되는 약간의 정보를 정의.
using UnrealBuildTool;
public class <ModuleName> : ModuleRules
{
public <ModuleName>(TargetInfo Target)
{
PublicDependencyModuleNames.AddRange(new string[] {"Core", "Engine"} );
PrivateDependencyModuleNames.AddRange(new string[] {"RenderCore"});
}
}
INI 파일 셋업
새 게임 플레이 모듈은 UObject 코드를 가질 것이기에 약간의 환경 설정 필요.
- DefaultEngine.ini 파일의 여러 부분에 모듈을 추가 시켜야함.
[UnrealEd.EditorEngine]
+EditPackage=<ModuleName>
[Launch]
Module=<ModuleName>
[/Script/Engine.UObjectPackages]
+NativePackages=<ModuleName>
다중 게임 플레이 모듈
게임을 다수의 DLL 파일로 나누는 것은 그 이득보다 문제가 많을 수 있지만, 이것은 각 팀의 요구와 원칙에 따라 결정해야할 것. 다중 게임 플레이 모듈을 사용하면 링크 시간이나 코드 반복처리 시간이 빨라지겠지만, DLL 익스포트 또는 인터페이스 클래스를 처리해야하는 모듈수가 늘어나게 된다.
primary 게임 모듈을 만든 이후에는 추가적인 게임 전용 모듈을 몇개든 추가할 수 있음 이러한 새 모듈에 대해 *.Build.cs 파일을 만들고, 이 모듈에 대한 레퍼런스를 자기 게임의 Target.cs 파일(OutExtraModuleNames 배열)에 추가 된다. C++ 코드에서 게임 모듈에 적합한 메크로를 사용했는지 확인 필요.최소한 하나의 모듈에서
IMPLEMENT_PRIMARY_GAME_MODULE 매크로를 사용해야하는 반면, 다른 모든 것들은
IMPLEMENT_GAME_MODULE 매크로를 사용해야 함. 그러면 UBT(언리얼 빌드 툴)은 자동으로 모듈을 발견하여 부가 DLL 파일 컴파일.