참고하면 좋은 자료  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 시스템을 지원하는 커스텀 파싱 및 코드 생성 툴입니다. 코드 컴파일은 두 단계로 이루어집니다:

  1. UHT 를 실행합니다. 언리얼 관련 클래스 메타데이터에 대한 C++ 헤더를 파싱하고, 다양한 UObject 관련 기능 구현을 위한 커스텀 코드를 생성하는 툴입니다.

  2. 보통 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 메뉴를 눌러줍시다. 

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] 언리얼 빌드 시스템

 

1. 깃허브를 이용한 풀 소스를 다운 받고,  C++ 풀 소스 프로젝트로 진행을 한다

풀소스를 받고 사용하는 방법은 언리얼엔진 수정을 할때, 사용하는 것 같다.
엔진을 수정하지 않고, 게임만 제작 할려면 에디터 언리얼을 이용하는게 좋은 거 같다.
<사용 중 오류가 발생 해서, 에디터로 갈아탐>

방법 : https://kyoun.tistory.com/118

 

2. 에디터 옵션에서, 디버깅을 위한 편집기 기호를 체크 한다

 

 

이제  GetWorld()->SweepSingleByChannel() 함수를 타고 들어 갈수 있게 된다.

 

GetWorld()

 

이젠 pdb 창 뜨면서 디버깅을 확인을 못하던 것을 할 수 있게 됐다

 

 

1. 소스 제어 - 기본 데이터 등록


언리얼 엔진의 소스를 받으면 다음과 같은 파일들이 생성된다.
각각의 항목에 대한 자세한 내용은 [ 디렉토리 구조 ] 문서에 나와 있다.

 


git 을 안 쓰면 1번 항목을 지워도 됨


2. Setup.bat

이제 Setup.bat 를 실행해서 의존성 파일들을 설치한다.
1 번을 통해 소스 제어에 등록된 파일들을 다운로드받은 작업자들도 반드시 이를 실행해야만 함.

----------추후 참고--------
나중에 자동화와 배포에 대해서 정리할 기회가 있으면 그 때 다시 언급하겠지만,

만약 작업자 머신에서 이 배치파일이 실행된 적이 없다면, 프로그래머가 열심히 바이너리를 배포해 놓아도 
에디터에서 안드로이드같은 디바이스로 프로그램을 런칭시킬 수 없습니다
(물론 "Engine/Extras/AndroidWorks/Win64/AndroidWorks-1R1-windows.exe" 도 깔려 있어야
 ).
-----------------

 

실행 후 설치 화면 다운로드 중


3. 소스 제어 - 의존성 파일 등록

만약 언리얼 빌드 시스템에 손을 댈 계획이라면 소스제어에 등록해야 하지만, 그렇지 않다면 등록할 필요가 없다.

두 가지 이유 때문에 의존성 파일들을 소스 제어에 등록해 둔다.

  • Setup.bat 는 의존성 파일들을 먼저 검색하고 없는 파일만 추가적으로 다운로드다.
    일반적으로 외부에서 데이터를 받는 것보다는 내부에서 받는 것이 빠르기 때문에 미리 올려 놓는 것이 좋다. Setup.bat 를 실행했을 때 다운로드받는 양은 적어지고 필요한 작업만 수행한다.
  • 나중에 엔진을 빌드하고 나면 의존성 파일들이 있는 디렉토리와 엔진 바이너리 파일들이 있는 디렉토리가 동일하기 때문에, 파일을 개별적으로 관리하기가 어려워진다. 그냥 통째로 "Engine/Binaries" 폴더를 등록하는 것이 편함( 의존성 파일들이 해당 디렉토리에만 있는 의미는 아니니 헷갈리지 않길 바람).

참고로 다른 자리에서 Setup.exe 를 실행하면 콘솔 프롬프트에 일부 파일을 덮어 쓸 것이냐는 질문을 하는데,
이 때 No 를 선택하면 됨.

만약 의존성 파일을 등록해야겠다고 판단하셨다면, 새롭게 추가된 파일들을 모두 등록하시면 된다
(여기까지는 그냥 엔진 루트 디렉토리를 통째로 등록하면 됨 ).


 

4. GenerateProjectFiles.bat


이제 프로젝트 관련 파일들을 생성할 차례. [프로그래머]만 실행.
이 파일을 실행하게 되면 언리얼 엔진 소스 폴더를 열심히 돌면서 자동으로 프로젝트 파일을 생성한다.
이와 관련한 도움말은 [ 자동 프로젝트 파일 생성 ] 참고.

요즘은 멀티 플랫폼에서 개발하는 시대이기 때문에, 특정 버전의 프로젝트 파일을 제공하는 것은 불합리하다.
물론 make 파일을 사용하면 되지만, 이를 구성별로 사용자가 따로 관리하는 것은 어렵고, 그래서 언리얼은 이러한 과정을 모두 자동화 되어 있다..

  언리얼은 이 과정을 자동화시켜 사용하기 편하게 되어있다.
어떤 파일이 추가/삭제/이동되면 그냥 GenerateProjectFiles.bat 을 한 번 실행해 주기만 하면 됩니다.
프로젝트 관련 파일들은 Intermediate 디렉토리에 생성되며, 이러한 것들은 소스 제어에 등록될 필요가 없다.
VS 에서 파일 구조를 filter 같은 것을 사용해서 관리하기 보다는, 실제 디렉토리를 중심으로 filter 가 생성되도록 하는 것이 더 합리적이고 파일을 찾기도 편하다.

  이제 엔진 루트에 UE4.sln 이라는 솔루션 파일이 생성되어 있는 것을 확인하실 수 있다.
프로젝트 관련 ( 임시 ) 파일들은 "Engine/Intermediate" 디렉토리 안에 생성된다.
이 디렉토리는 소스제어에 등록할 필요가 없다.  추가로 솔루션 파일도 재생성할 수 있으므로 소스 제어에 등록할 필요가 없다.

 

GenerateProjectFiles.bat 실행 후 오류 발생



위 구성요소를 설치로 문제 해결함

 

정상 실행 후 UE4.SIN 생성된 화면

 

 


5. 엔진 빌드하기


언리얼 엔진을 빌드하려고 하면서 가장 어려웠던 점은 솔루션 구성을 인데, 
이와 관련한 문서는 [ 게임 프로젝트 컴파일하기 ] 와 [ 소스에서 언리얼 엔진 빌드하기 ] 등 참고

 

구성은 크게 5 종류의 카테고리로 나뉜다. 

 항목

 설명

 Debug

 모든 프로젝트의 바이너리가 디버깅 심볼을 가지도록 합니다.

 DebugGame

 게임 프로젝트의 바이너리만 디버깅 심볼을 가지도록 합니다.

 Development

 일반적인 프로젝트에서의 Release 환경설정과 같습니다.

 Test

 Shipping 에서 콘솔, 통계, 프로우파일링을 추가한 것입니다.

 Shipping

 최상의 성능을 가진 설정입니다.

 

도움말에서는 "DevelopmentEditor + Win64 + UE4" 를 빌드할 것을 권장

※ 폴더 경로가 바뀌면 다시 빌드를 해야하니 주의

 

솔루션 실행 화면

 

 

빌드 매우 오래 걸림

 

용량 매우 큼

 

빌드가 끝나면 엔진 루트의 "Engine/Binaries/Win64/UE4Editor.exe" 에디터를 실행한다.
원래 에디터를 처음 실행할 때는 45% 정도에서 오래 멈춰있음


이 페이지 에러는 아직 발생 안함


그런데 에디터를 잘 가지고 놀다가 플레이( Play In Editor, PIE )를 하는 것은 상관없는데,
실행( Launch )를 하면 에러가 발생합니다. [실행 중 아직 발생은 안함]

 

 

이런 류의 에러는 앞으로 안드로이드용 개발을 하다가도 자주 만나게 되는 에러입니다. 

XXXEditor 구성을 사용하면, "UE4Editor-$(Platform)-$(Configuration).exe" 라는 바이너리를 생성합니다.
하지만 DevelopmentEditor 구성에서는 그냥 "UE4Editor.exe" 를 생성합니다.

그리고 Debug, DebugGame, Development, Test, Shipping 은 각각의 구성에 맞게 "UE4Game-$(Platform)-$(Configuration).exe" 라는 바이너리를 생성합니다. 이것이 하나의 에디터에서 다양한 플랫폼의 실행 파일을 런칭할 수 있는 비법( ? )입니다.

DevelopmentEditor 구성으로 UE4Editor.exe 를 빌드하면 기본적으로 UE4Game-Win64-Development.exe 를 런칭합니다. 다른 구성으로 빌드된 바이너리를 런칭하기 위해서는 "실행 > 프로젝트 런처" 를 클릭합니다.

 

 

그리고 나서 나오는 다이얼로그에서 오른쪽 상단의 "고급" 버튼을 클릭합니다. 그러면 각 구성과 플랫폼별로 런칭할 수 있는 구성이 나옵니다.

 

 

만약 해당 구성으로 빌드한 적이 없다면 또 "UE4Game 바이너리가 없습니다" 라는 에러 메시지를 만나게 되겠죠.
  정리하자면 개발하는 동안에는 "DevelopmentEditor + Win64 + UE4" 와 "Development + Win64 + UE4" 구성만 빌드하면 됩니다.
  만약 에디터에서 안드로이드 플랫폼에 프로젝트를 런칭하기를 원한다면 "Development + Andoroid + UE4" 를 빌드하면 됩니다.

프로젝트 런처를 통해서 실행한 프로그램을 프로세스에 연결해서 디버깅해 보고 싶다면 "Debug + Win64 + UE4" 같은 구성도 미리 빌드해 놓는 것도 좋겠죠. 하지만 이런 구성은 다른 개발자들에게 배포할 필요는 없으므로 소스 제어에는 등록할 필요가 없을 것 같습니다.


6. 소스 제어 - 바이너리 등록


"DevelopmentEditor + Win64 + UE4", "Development + Win64 + UE4", "Development + Android + UE4" 를 빌드했다면, "Engine/Binaries" 디렉토리를 통째로 소스 제어에 등록된다.

물론 3 번에서 의존성 파일을 등록하지 않았다면 그것을 배제하는 작업을 좀 해야함??.

플러그인들도 빌드되기 때문에 Plugins 디렉토리도 같이 등록 한다.
이 때 각 하위 디렉토리의 Intermediate 디렉토리에 있는 것들은 등록에서 배제해야 한다.

추가적으로 다른 구성을 등록해야겠다고 생각하시면 그렇게 하셔도 상관은 없다. 
아래와 같이 플랫폼별로 디렉토리가 세분화되어 있다.

 


7. 모듈 이해하기


언리얼에서 CPP 프로그래밍을 하다가 보면 모듈( Module )이라는 용어가 자주 등장하는데.
이와 관련해서는 [ 언리얼 아키텍처 ], [ 모듈 API 지정자 ], [ 게임플레이 모듈 ] 등의 도움말이 있다

https://lifeisforu.tistory.com/323 


8. CPP 프로젝트 만들기


 

 

자 이제 솔루션에는 BlankCpp 라는 프로젝트가 포함된다. 
당연히 내부적으로 GenerateProjectFiles.bat 을 실행시켜서 포함시킨 것
디렉토리에 파일이 남아 있으면 제대로 프로젝트가 생성된다

 

 

역시 여기에도 BlankCpp.Build.cs 라는 녀석이 생성되는데. 즉 BlankCpp 모듈이다.
우리는 UE4 를 이미 빌드했기 때문에, BlankCpp 만 빌드하면 된다.
앞으로는 프로젝트만 빌드를 하면됨

 


9. 소스제어 - CPP 프로젝트 데이터 등록

BlankCpp 프로젝트를 빌드했으면 이제 소스 제어에 올릴 차례인데.
프로젝트 관련 파일들은 재생성하면 된다고 했기 때문에 올릴 필요가 없다.
그래서 아래 그림과 같이 선택된 디렉토리와 파일만 등록하면 된다.

 

BBCCS

그런데 다른 자리에서는 어떻게 프로젝트 파일을 생성 방법은
"GenerateProjectFiles.bat BlankCpp.uproject -Game" 이라고 콘솔 창에서 입력하거나
uproject 를 열어서 에디터에서 다음과 같은 메뉴를 사용하면 된다.

 

또는 BlankCpp.uproject 파일의 컨텍스트 메뉴에서 생성할 수 있다.

 

어쨌든 전부다 본질은 GenerateProjectFiles.bat 에 있다.


 

10. 결론

  이 문서에서는 모듈에 대해서만 잠깐 다루고 타깃에 대해서는 다루지 않았는데,
"*.Build.cs" 와 마찬가지로 "*.Target.cs" 라는 파일들이 존재합니다. 이건 dll 단위로 존재하는데,  
자세한 내용은 [ 언리얼 빌드 시스템 타겟 파일 ] 참고

혹시 엔진을 커스터마이징해서 배포하는 팀( 혹은 사람 )과 엔진을 받아서 사용하는 팀이 구분되어 있고 서로의 영역을 건드리지 않는다면, [ 빌드 그래프 ] 와 [ Installed Build 참고서 ] 를 참고해서 배포를 해야 한다.
  그냥 빌드해서 서밋하시면 코드가 변경되었기 때문에 엔진 코드를 수정하면 게임 칸텐츠를 작업하는 측에서 엔진까지 빌드해야 하는 경우가 생긴다.

 

 


프로젝트 들은 언리얼설치한 소스 위치로 버전 변환이 가능해짐

 

실행 후 프로젝트 아래 프로그램은 제외처리 해야 하는 거 같음

 

처음 Lanch로 설정후 실행 - 빌드 매우 오래 걸림


 

프로젝트로 Lanch를 실행을 하게 되면,  실행파일 들을 빌드를 하게 된다. [Lanch시 참고]
Intermediate 에 파일이 생성되고 용량이 의외로 크다

 


 

 

  언리얼 엔진이 설치되면 언리얼프로젝트 파일이 윈도우 시스템에 등록이 됩니다. 
언리얼프로젝트 파일은 파란색 언리얼 엔진 아이콘과 uproject 확장자를 가지게 되는데요, 
에픽게임스 런쳐에 의해 UnrealEngineSelector라는 프로그램과 자동으로 연동됩니다. 

 

<경로를 깃허브 언리얼 위치로 바꾸어서 진행해봄 >
"C:\UnrealEngine\Engine\Binaries\Win64\UnrealVersionSelector-Win64-Shipping.exe" /editor "%1"
-> 라이팅빌드 오류 및 URL 오류 발생 -> 기존 프로젝트들도 빌드 확인 -> 같은 오류 발생
-> 그래서 에디터 언리얼로 재설치 하니 오류 발상안함

 

  UnrealEngineSelector 프로그램은 uproject의 내용을 분석하고 적절한 버젼의 언리얼 엔진이 실행되도록 도와주는 중개자 역할을 수행합니다.
  그래서 uproject 파일에는 UnrealEngineSelector가 해석할 수 있도록 JSON 형식의 문자열로 프로젝트 설정 값이 기록되어 있습니다.  uproject파일에서 지정할 수 있는 항목은 여러가지가 있지만 언리얼 프로젝트가 실행하기 위해서는 필수적으로 아래 두 가지 항목이 있어야 합니다.  

 1. FileVersion : 언리얼 엔진 파일의 버전을 의미합니다. 현재 언리얼 엔진이 공통으로 사용하는 값은 3입니다. 이 값은 당분간 바뀔 일은 없어보입니다. 정수로 기입하면 됩니다. 

 2. EngineAssociation : 셀렉터가 구동할 언리얼 엔진의 버전을 지정합니다. GitHub에서 다운받아서 빌드한 커스텀 버젼의 경우에는 프로젝트의 GUID가 지정됩니다. 따라서 항목의 값은 문자열입니다. 

 

이 설정 값을 JSON 형식으로 직접 만들어봅시다. 
OOO 이라는 폴더를 하나 생성합시다. 이 폴더는 프로젝트 폴더로 쓸 겁니다. 
그리고 메모장을 사용해 아래와 같이 입력하고 OOO 폴더 안에 OOO.uproject라는 파일로 저장

 

메모장으로 JSON 형식으로 작성

 

이제 이 파일을 더블 클릭하면 자동으로 언리얼 프로젝트가 실행됩니다. 

 

확장자 바꾸고 실행히 화면(깃허브소스)

 

 

실행시 생성되는 폴더

 

uproject 실행화면


모듈


어떤 독립된 체계를 정의하기 위해 프로그래밍 코드를 묶은 것

이렇게 실행된 프로젝트는 C++와 연관이 전혀 없는 블루프린트 기반의 프로젝트입니다.
현재 아무런 정보가 없다보니, 언리얼 엔진은 uproject 파일이름을 프로젝트 이름으로 인식해 프로젝트를 생성합니다. 

이번에는 C++ 클래스를 추가하는 과정을 통해 이 프로젝트를 C++ 프로젝트로 확장시켜봅시다.
그래서 C++로 무언가를 만들어야 하는데요,
게임 프로그램을 관리하는 클래스인 게임 인스턴스를 하나 만들어보겠습니다. 
생성이 되고 난 뒤 먼저 uproject 파일을 메모장에서 다시 열어보면, 뭔가가 많이 추가되어 있다.  

 

{ 
    "FileVersion": 3, 
    "EngineAssociation": "4.14", 
    "Category": "", 
    "Description": "", 
    "Modules": [ 
        { 
            "Name": "ArenaBattle", 
            "Type": "Runtime", 
            "LoadingPhase": "Default", 
            "AdditionalDependencies": [ 
                "Engine" 
            ] 
        } 
    ] 
} 
메모장으로도 열어서 볼수 있음

 

여기서 눈여겨볼 부분은 Modules라는 항목입니다.

  JSON에서 배열(Array)을 나타날 때,사용하는 [] 기호 내에 객체를 나타내는 {}로 ArenaBattle이라는 것이 정해져 있습니다.

이를 유추해보면 "Modules 설정은 여러개의 객체로 구성되는데
우리 프로젝트에는 하나의 모듈이 있고, 이의 이름은 ArenaBattle이고 Runtime 타입이다." 라고 해석할 수 있게됩니다. 

 모듈은 말 그대로 우리가 익히 아는, 어떤 독립된 체계를 정의하기 위해 프로그래밍 코드를 묶은 것을 의미합니다.

언리얼 엔진에서는 자체적으로 정의된 모듈이라는 가상 프레임웍이 있는데, 우리가 C++ 클래스를 하나 추가한 순간 이것이 만들어지게 된 것입니다. 

  언리얼 엔진의 소스코드도 결국 에픽 게임스가 만들어 놓은 수 많은 모듈들의 집합체일 뿐입니다. 에픽 게임스가 만들어 놓은 모듈들은 이미 다 컴파일까지 완료되 우리가 엔진을 다운 받을 때 공급됩니다. 

아래 폴더로 가서 이미 만들어져 있는 수 많은 dll 파일들과 lib파일들을 살펴보면 이 개념을 이해하는데 도움이 될 겁니다. 이 파일들이 모듈의 결과물들입니다.  


참고로 UE4Editor-로 시작하는 이름의
dll 파일에디터에서 사용할 모듈이고
UE4-로 시작하는 lib 파일은 패키징용으로 제작된 모듈입니다.
그리고 - 뒤는 모듈의 이름을 의미합니다. )

 

 


엔진모듈 게임모듈

 

그런데 언리얼 엔진이 제공하는 모듈만으로 게임을 만들기에 부족하다면 어떻게 할까요?
모듈을 추가해야 할 필요가 있습니다. 그래서 언리얼 엔진은 개발자가 모듈을 추가할 수 있도록 설계도 열어놓았습니다.

전자를 엔진 모듈이라고 하고, 후자를 게임 모듈이라고 합니다.

이렇게 엔진 모듈과 게임 모듈이 결합되면 게임 제작에 기반이 되는 C++ 프레임웍이 완성됩니다. 

 

언리얼 엔진의 구성도

 

우리가 새롭게 추가한 GameInstance는 게임 모듈로 들어가야 하는데,
처음에 사용자 모듈이 없는 블루프린트 Only 프로젝트로 만들었기 때문에,
언리얼 엔진에서는 자동으로 프로젝트 이름과 동일한 모듈을 만들고,

이 모듈에 저희가 지정한 클래스를 만들어 넣어 주었습니다. 
이 모듈에 해당하는 부분이 Source 폴더 아래에 있는 ArenaBattle 폴더입니다. 

 

ArenaBattle 모듈

 

정리하면 "ArenaBattle 프로젝트에,
ArenaBattle이라는 사용자 C++ 게임 모듈을 추가한 상황이고,
이 모듈에는 ABGameInstance라는 객체가 들어있다." 는 상황이라고 볼 수 있습니다.

 


 

[참고] [1-1] 언리얼 C++ 프로젝트의 구성

 

언리얼 리소를 받을려고 했지만, 일단 깃허브에서는 보이지 않는다 

 

 

주소를 들어가도 안나온다

 

 

 


받기 위해선 깃허브 계정 연동을 진행 하여야 한다.

 




 

연결 뒤에 깃허브에 접속을 하면, 초대메시지가 온다

 

 

가입을 한다

 

 

보인다!


 

다운 받을 버전을 설정하고 다운 받는다

'Unreal > Concept' 카테고리의 다른 글

언리얼 엔진 소스 디버깅 하는 방법  (0) 2019.05.23
깃허브 언리얼엔진 풀소스 C++ 빌드  (0) 2019.05.23
게임모드, 스테이트, 인스턴스  (0) 2019.05.14
프로퍼티 지정자  (0) 2019.05.12
게임 프레임워크  (0) 2019.05.12

+ Recent posts