참고하면 좋은 자료 https://replay.unrealsummit.co.kr/data2018/usm2018_41.pdf
Unreal Build System (언리얼 빌드 시스템)은 언리얼 엔진 4 (UE4) 빌드 프로세스를 자동화시키는 툴 모음을 말합니다. 일반적인 수준에서 UnrealBuildTool 과 UnrealHeaderTool 은 언리얼 빌드 시스템을 지원합니다.
UnrealBuildTool
UnrealBuildTool (UBT)는 다양한 빌드 구성으로 UE4 소스 코드를 빌드하는 프로세스를 관리해 주는 커스텀 툴입니다. BuildConfiguration.cs 파일에서 다양한 사용자 환경설정 가능 빌드 옵션을 살펴볼 수 있습니다.
UnrealHeaderTool
UnrealHeaderTool (UHT) 는 UObject 시스템을 지원하는 커스텀 파싱 및 코드 생성 툴입니다. 코드 컴파일은 두 단계로 이루어집니다:
-
UHT 를 실행합니다. 언리얼 관련 클래스 메타데이터에 대한 C++ 헤더를 파싱하고, 다양한 UObject 관련 기능 구현을 위한 커스텀 코드를 생성하는 툴입니다.
-
보통 C++ 컴파일러를 실행하여 그 결과를 컴파일합니다.
컴파일시, 둘 중 어느 툴에서도 오류가 날 수 있으므로, 유심히 살펴 보시기 바랍니다.
모듈식 아키텍처
UE4 는 다수의 모듈로 나뉘어 있습니다.
각 모듈에는 .build.cs 파일이 있으며, 이를 통해 그 빌드 방식을 제어하고, 모듈 종속성, 부가 라이브러리, 인클루드 경로 등의 정의를 위한 옵션도 포함되어 있습니다.
기본적으로, 이 모듈은 DLL 에 컴파일되어 하나의 실행파일로 로드됩니다. BuildConfiguration.cs 파일에서 monolithic 실행파일 빌드를 선택할 수 있습니다.
언리얼 빌드 시스템 사용
언리얼 빌드 시스템을 사용하기에 앞서, 개발 환경에 대해 (Visual Studio 의 경우) .sln 이나 .vcproj 파일처럼 프로젝트 파일 개별적으로 빌드 프로세스가 실행된다는 것을 이해하는 것이 중요합니다.
이 파일을 갖고 있으면 편집 목적 상 유용하긴 하지만, 프로젝트 디렉터리 구조 내용에 따라 동적으로 생성하는 툴이 제공되어 있습니다. 이 툴은 [Root UE4] 디렉터리의 GenerateProject.bat 파일로 실행시킬 수 있습니다.
지난번에 작업한 프로젝트 폴더를 열어봅시다.
처음에는 비어 있던 폴더에 단지 uproject 파일만 제작했을 뿐인데, 현재 많은 폴더와 상당한 용량을 차지하고 있는 것을 볼 수 있습니다.
이번에는 눈을 딱 감고 Config(있는 경우에만), Content , Source를 제외한 모든 폴더와 ArenaBattle.uproject 파일을 제외한 모든 파일을 제거해봅시다. (CCS만 살린다)
그러면 아래 그림과 같이 폴더가 굉장히 슬림하게 줄어들어 있을 겁니다.
폴더 전체를 합쳐도 용량이 겨우 4KB에 불과합니다.
이제 uproject 파일을 마우스 우 클릭하고, Generate Visual Studio project files 메뉴를 눌러줍시다.
그러면 다이얼로그가 뜨면서 아래와 같이 비주얼 스튜디오 관련 파일 및 폴더와 Intermediates 폴더가 자동으로 생성됩니다.
솔루션 파일 ArenaBattle.sln 파일을 더블 클릭해 열어봅시다.
그러면 지웠던 솔루션 파일이 원상복구 되어 있음을 확인할 수 있습니다.
언리얼 빌드 시스템
추상적인 소스 코드 구조를 만들고, 이를 기반으로 플랫폼에 맞게 프로젝트를 재생성하는 기능
분명히 삭제한 솔루션 파일이 완벽하게 복원이 되었는데, 어떻게 이것이 가능한지 이해하려면 언리얼의 빌드 시스템에 대해 알아야 합니다.
언리얼 엔진 4부터는 개발 환경이 맥(Mac)하고 윈도우(Window), 두 가지 플랫폼을 지원하도록 설계되어 있습니다.
두 플랫폼의 개발 환경(IDE)이 동일하면 좋겠지만,
1. 맥에서는 엑스코드(XCode),
2. 윈도우에는 비주얼 스튜디오(Visual Studio)
라는 막강한 툴이 있어서, 현실적으로 이를 고려하지 않고 개발하기가 어렵습니다.
그런데 이 툴은 서로 다른 체계로 프로젝트를 관리합니다.
이러다 보니, 추상적인 소스 코드 구조를 만들고,
이를 기반으로 플랫폼에 맞게 프로젝트를 재생성하는 기능이 필요하게 되었습니다.
이를 위해서 에픽 게임스가 제작한 프로그램이 언리얼 빌드 툴(Unreal Build Tool)입니다.
방금 실행한 Generate Visual Studio project files 메뉴는 이 언리얼 빌드 툴을 실행하는 명령입니다.
언리얼 빌드 툴이 실행되면 현재 프로젝트의 폴더 구조와 소스 파일들을 분석하고 현재 작업하는 플랫폼에 맞는 개발 도구 환경을 자동으로 생성해줍니다.
우리는 현재 윈도우에서 실행했기 때문에 비주얼 스튜디오에 맞는 개발 도구 환경이 생성되게 된 것이지요.
언리얼 빌드 툴이 실행되면 먼저 프로젝트의 Source 폴더를 찾습니다.
Source 폴더 아래에 빌드 할 대상 정보를 지정한 Target.cs 파일을 조사하면서 하위에 모듈이 있는지 검사합니다.
모듈은 항상 독립된 폴더 단위로 나뉘어 있어야 하며, 이 모듈도 언리얼 엔진이 지정한 특정한 룰을 따라야 합니다.
모듈에 대해서는 다음 강좌에서 자세히 설명하겠습니다.
언리얼 빌드 툴은 Source 폴더의 조사가 끝나면,
Intermediate폴더 안의 ProjectFiles 폴더에 자신이 조사한
1. 언리얼 소스 구조를 정리해 프로젝트 파일을 생성함과
2. 동시에 언리얼 엔진 설치 폴더로부터 소스 코드에 대한 프로젝트 파일도 복사해옵니다.
마지막으로 이 둘을 합친 솔루션 파일을 프로젝트 폴더에 생성해, 바로 프로그래밍을 할 수 있도록 편의를 제공해줍니다.
이것이 언리얼 빌드 툴이 하는 역할입니다.
아래는 언리얼 빌드 툴에 의해 제작된 비주얼 스튜디오 솔루션의 모습입니다.
두 프로젝트(UE4, GAME)은 Intermediate 폴더에 있음을 꼭 기억해주시면 좋겠습니다.
참고로 Generate Visual Studio project files 메뉴로 프로젝트를 생성하는 경우,
간혹가다 우리가 작업 하는 ArenaBattle이 시작 프로젝트로 설정되어 있지 않고 소스 코드 참고용 프로젝트인 UE4가 시작 프로젝트로 설정될 때가 종종 발생합니다.
컴파일이 동작하지 않는 경우에는 아래 그림처럼 시작 프로젝트를 확인해주시고 게임 프로젝트인 ArenaBattle을 기본 프로젝트로 설정해주어야 정상 동작하게 됩니다. (엔진 빌드 말고 게임솔루션을 빌드 해야함)
개발버전 설정
이번에는 비주얼 스튜디오의 툴바 상단을 보겠습니다.
솔루션 구성과 플랫폼을 보면 Editor와 Editor가 아닌 목록이 번갈아 들어 있음을 볼 수 있습니다.
Editor로 끝나는 설정은 에디터용 dll 파일을 생성하는 구성이고
Editor가 없는 설정은 게임 패키징용 exe 파일을 생성하는 구성입니다.
현재 기본 값은 Development Editor로 되어 있습니다.
이는 디버깅이 가능한 개발 버전으로 컴파일해 에디터용 dll 파일을 제작하라는 의미입니다.
F7 키를 눌러 Development Editor 구성으로 빌드 하면,
아래 그림과 같이 UE4Editor-ArenaBattle.dll이 생성되는 것을 로그로 확인할 수 있는데,
이 파일은 프로젝트 폴더의 Binaries > Win64 폴더에 생성됩니다.
이번에는 빌드 구성을 바꾸어 Development로 변경해 빌드를 진행해봅시다.
F7 키를 눌러 빌드 하면 출력 로그에는 이번에는 동일한 폴더 위치에 exe 파일이 생성된 것을 볼 수 있습니다.
Editor가 없는 구성은 게임을 만드는 빌드 설정이고, 우리가 지정한 플랫폼은 Win64이기 때문에 최종적으로 exe 파일이 만들어진 것입니다.
참고로 컴퓨터에 안드로이드 개발 환경이 설치되어 있다면 Win64외에도 Android를 플랫폼 목록에서 확인할 수 있습니다. 아래와 같이 Development 와 Android 가 선택된 상태에서 빌드를 수행하면 exe 파일 대신 안드로이드에서 동작하는 apk 파일이 자동으로 만들어집니다. ( Android 메뉴는 안드로이드 개발 환경이 설치되어 있을 때만 자동 생성됩니다. )
다시 돌아와서, Win64 빌드로 생성된 exe 파일을 실행하면, 게임이 실행되는데 현재 이 실행파일이 참고할 아무런 리소스가 없다 보니 아래와 같은 에러를 띄우고 프로그램은 바로 종료됩니다.( 게임이 올바르게 실행되려면 exe파일외에도 리소스 파일과 관련 파일들이 exe파일이 인지할 수 있는 경로에 있어야 합니다. )
Target.cs 파일
빌드 구성을 지정하는데 사용되는 설정 파일
지금까지 언리얼 빌드 툴이 생성한 비주얼 스튜디오 솔루션이 두 개의 다른 유형의 빌드를 생산할 수 있도록
설계된 것을 확인했습니다. (윈도우, 안드롷이드)
이 설정 또한 언리얼 엔진 규칙에 의해 정의된 것이며,
이는 프로젝트의 Source 폴더의 ArenaBattle.target.cs와 ArenaBattleEditor.target.cs 파일에 지정되어 있습니다.
Target.cs 파일은 빌드 구성을 지정하는데 사용되는 설정 파일입니다.
그림에서 보이다시피 C# 언어의 클래스로 구성되어 있습니다. 이 두 파일을 열어보면 생성자 구문에 C#의 생성자 구문에 Type 정보가 기록되어 있습니다.
Editor는 Type이 Editor로 되어 있고, Game은 Type이 Game으로 되어 있는데, 이 항목이 빌드의 구성을 결정하는 중요한 설정값입니다. ( 이 파일이 지원하는 다른 Type 값으로는 Program과 Server가 있는데, 엔진에서 보조로 사용할 콘솔 프로그램을 제작하거나 서버 빌드를 제작하는데 사용됩니다. )
using UnrealBuildTool;
using System.Collections.Generic;
public class ArenaBattleTarget : TargetRules
{
public ArenaBattleTarget(TargetInfo Target)
{
Type = TargetType.Game; // Target.cs 파일
}
//
// TargetRules interface.
//
public override void SetupBinaries(
TargetInfo Target,
ref List<UEBuildBinaryConfiguration> OutBuildBinaryConfigurations,
ref List<string> OutExtraModuleNames
)
{
OutExtraModuleNames.AddRange( new string[] { "ArenaBattle" } );
}
}
지금까지 살펴본 언리얼 엔진의 빌드 구조는 아래와 같이 정리할 수 있습니다.
정리하면 언리얼 전체 프로젝트에서 중요한 폴더는 Config , Content , Plugins, Source 폴더와 uproject 파일뿐입니다. 나머지 폴더와 파일은 제거하더라도 언리얼 빌드 툴에 의해서 재생성이 가능합니다.
따라서 협업을 위해 소스 코드를 관리할 때나 다른 프로젝트로 파일을 옮길 때 무리하게 빌드 된 결과물을 옮길 필요 없이, 위에서 언급한 폴더와 파일만 공유하면 됩니다.
[참고] [1-2] 언리얼 빌드 시스템
'Unreal > Study' 카테고리의 다른 글
5. UClass와 리플렉션 + 로그디버깅 (0) | 2019.05.27 |
---|---|
4. 클래스 기본 객체 (CDO) + 로딩과정 + 로그디버깅 + 인스턴스생성 (0) | 2019.05.24 |
3. 언리얼 오브젝트 +구성 + 선언규칙 + 매크로 + 게임인스턴스 (0) | 2019.05.24 |
2. 모듈의 제작 + 모듈 추가명령 + 구성 (0) | 2019.05.24 |
0. 언리얼 C++ 프로젝트의 구성 (0) | 2019.05.23 |