언리얼의 모듈

1000·2020년 12월 4일
0

언리얼 기초 공부

목록 보기
2/16

1. 언리얼의 모듈 개념

언리얼 엔진의 모든 소스는 모듈이라는 단위로 구성되어 있으며
이 중에서 필요한 모듈을 타겟으로 묶어서 최종 빌드를 만들어냅니다.

A라는 게임 프로젝트는 A라는 동일한 이름의 C++ 모듈이 추가된 형태입니다.
이렇게 언리얼 엔진의 C++ 개발 환경은 하나의 게임 프로젝트에 하나의 모듈을 사용하는 것이 일반적입니다. 언리얼 엔진에서는 A 모듈과 같이 게임 제작에 사용되는 로직을 담은
기본 모듈을 주 게임 모듈(Primary Game Module)이라고 합니다.

이를 확인하기 위해 프로젝트의 A 폴더에 있는 A.cpp를 열어봅시다.

#include "A.h" 

IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, A, "A" );

2. 새로운 모듈 추가

언리얼 엔진에서 모듈이 하나 생성되기 위해서는 아래와 같이 세 가지의 요소가 필요합니다.
1. 모듈의 이름과 동일한 폴더
2. PreCompiled .h와 .cpp (모듈이름.h, 모듈이름.cpp)
3. 모듈의 빌드 규칙 파일 (모듈이름.Build.cs)

모듈이름.cpp 파일에 아래와 같이 정의해줍니다.
주 게임 모듈이 아니므로 IMPLEMENT_MODULE 매크로를 사용하도록 합니다.
FDefaultModuleImpl은 이미 엔진에서 제공하고 있는 모듈 제작을 위한 제공하는 간단한 클래스입니다.

IMPLEMENT_MODULE( FDefaultModuleImpl, 모듈이름 );

다음으로 모듈이름.Build.cs파일 구성에 대해 알아보겠습니다.
PublicDependencyModuleNames와 PrivateDependencyModuleNames 프로퍼티가 있습니다.
이는 현재 모듈이 참조할 외부 모듈의 목록을 지정하는데 사용합니다.
이들 프로퍼티는 각각 Public과 Private 폴더에서 참고할 모듈을 지정하는데 사용됩니다.

처음 사용하는 분들은 이 구조에 대해서 조금 혼동이 있는데,
언리얼 소스 코드 구조는 일반적으로 Public에는 헤더파일을 Private는 소스파일을 넣으므로
처음에는 PublicDependencyModuleNames 프로퍼티는 헤더파일이 참고할 모듈, PrivateDependencyModuleNames는 소스코드에서만 참고할 모듈이라고 이해하면 편합니다.

현재는 Core, CoreUObject, Engine, InputCore 네 가지 모듈이 있는데,
앞의 세 가지는 언리얼 엔진과 연동하는 기능을 만들 예정이라면 거의 대부분 사용해야 할 모듈입니다. InputCore는 입력에 관련된 모듈로 필요한 경우에만 추가해주도록 합니다.

이렇게 모듈에 필요한 파일들을 구성하고 Generate Visual Studio project files를 실행시켜 줍니다.
비주얼 스튜디오에 새로운 파일들이 추가된 것이 보이지만
빌드를 돌려보면 추가한 모듈은 빌드되지 않습니다.
빌드할 대상에 새로 만든 모듈을 추가되지 않았기 때문입니다.

빌드할 대상 모듈을 지정하는 공간은 프로젝트이름.Target.cs파일입니다.
게임 빌드와 에디터 빌드가 각각 A.Target.cs 파일과 AEditor.Target.cs 파일에 설정되어 있습니다.

이들을 열고 SetupBinaries 함수의 OutExtraModuelNames 프로퍼티에 우리가 제작한 모듈을 추가합시다.

public override void SetupBinaries( 
        TargetInfo Target, 
        ref List<UEBuildBinaryConfiguration> OutBuildBinaryConfigurations, 
        ref List<string> OutExtraModuleNames 

        ) 

    { 
        OutExtraModuleNames.AddRange( new string[] { "주 게임 모듈", "새로 추가한 모듈 이름" } ); 
    } 

이렇게 하면 빌드까지는 성공합니다.
하지만 에디터상에서 새로 추가한 모듈이 보이지 않게되는데
.uproject 파일에 새로 추가한 모듈 정보를 넣지 않아 에디터가 인식을 하지 못한 것입니다.

http://blog.dustinlee.me/220934079863

profile
Game Programming

0개의 댓글