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" 디렉토리 안에 생성된다.
이 디렉토리는 소스제어에 등록할 필요가 없다. 추가로 솔루션 파일도 재생성할 수 있으므로 소스 제어에 등록할 필요가 없다.
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 프로젝트를 빌드했으면 이제 소스 제어에 올릴 차례인데.
프로젝트 관련 파일들은 재생성하면 된다고 했기 때문에 올릴 필요가 없다.
그래서 아래 그림과 같이 선택된 디렉토리와 파일만 등록하면 된다.
그런데 다른 자리에서는 어떻게 프로젝트 파일을 생성 방법은
"GenerateProjectFiles.bat BlankCpp.uproject -Game" 이라고 콘솔 창에서 입력하거나
uproject 를 열어서 에디터에서 다음과 같은 메뉴를 사용하면 된다.
또는 BlankCpp.uproject 파일의 컨텍스트 메뉴에서 생성할 수 있다.
어쨌든 전부다 본질은 GenerateProjectFiles.bat 에 있다.
10. 결론
이 문서에서는 모듈에 대해서만 잠깐 다루고 타깃에 대해서는 다루지 않았는데,
"*.Build.cs" 와 마찬가지로 "*.Target.cs" 라는 파일들이 존재합니다. 이건 dll 단위로 존재하는데,
자세한 내용은 [ 언리얼 빌드 시스템 타겟 파일 ] 참고
추혹시 엔진을 커스터마이징해서 배포하는 팀( 혹은 사람 )과 엔진을 받아서 사용하는 팀이 구분되어 있고 서로의 영역을 건드리지 않는다면, [ 빌드 그래프 ] 와 [ Installed Build 참고서 ] 를 참고해서 배포를 해야 한다.
그냥 빌드해서 서밋하시면 코드가 변경되었기 때문에 엔진 코드를 수정하면 게임 칸텐츠를 작업하는 측에서 엔진까지 빌드해야 하는 경우가 생긴다.
프로젝트 들은 언리얼설치한 소스 위치로 버전 변환이 가능해짐
프로젝트로 Lanch를 실행을 하게 되면, 실행파일 들을 빌드를 하게 된다. [Lanch시 참고]
Intermediate 에 파일이 생성되고 용량이 의외로 크다
'Unreal > Concept' 카테고리의 다른 글
TFieldIterator, NativeFunctionLookupTable (0) | 2019.05.27 |
---|---|
언리얼 엔진 소스 디버깅 하는 방법 (0) | 2019.05.23 |
깃허브 언리얼 소스 받는 방법 (0) | 2019.05.21 |
게임모드, 스테이트, 인스턴스 (0) | 2019.05.14 |
프로퍼티 지정자 (0) | 2019.05.12 |