Unity 빌드(Unity 엔진 빌드가 아닙니다!)란 소스파일(cpp) 여러 개를 하나의 cpp로 Include하여 컴파일 속도를 빠르게 하는 빌드 옵션입니다. 이는 소스 파일이 많아짐에 따라 헤더파일들의 파싱 코스트를 줄이기 위한 목적으로 사용합니다.
언리얼 엔진에서는 기본적으로 Unity 빌드를 사용합니다.
(정확하지는 않지만 특정 개수의 소스파일 숫자가 되어야만 Unity 빌드가 동작하는 것 같습니다. 자세한 것은 좀 더 찾아보고 수정하겠습니다.)
기본적으로 `UBT(Unreal Build Tool)`에서 프로젝트 모듈의 .cpp 파일들을 모아 하나로 결합합니다.
이렇게 하여 엔진 빌드 시 적은 수의 파일과 포함 헤더를 처리하므로 시간이 단축되는 효과가 있습니다.
다만 소스 변경이 잦고 파일의 양이 많아지는 개발 단계의 경우 Non-Unity 빌드를 우선시 하여 빌드하는 것을 권장합니다.
Unity 빌드 자체가 여러 .cpp 파일을 묶어야 하는 작업을 수행하기 때문에 소스코드 한 줄 바뀌면 또 여러 파일을 하나의 .cpp로 묶는 작업을 매번 빌드 시 수행합니다. 그러므로 개발 단계에서 잦은 소스코드 수정이 있을 경우 이 Unity 빌드를 끄는 것이 좋습니다. (즉, 최종 빌드 시에 키면 컴파일 속도를 빠르게 할 수 있다는 의미. 물론 대형프로젝트에 한해서 ^^;;)
Build.cs 파일에서 이 설정을 키고 끌 수 있습니다.
아래의 코드를 추가하여 Non-Unity 빌드로 설정할 수 있습니다.
(활성화하려면 아래 코드를 주석 처리하면 됩니다.)
MinFilesUsingPrecompiledHeader = 1;
#if UE_4_24_OR_LATER
bUseUnity = false; // 4.24부터 바뀐 변수
#else
bFasterWithoutUnity = true; // 4.24 이전 버전
#endif
🔹정리
- 간단한 모듈 작업 혹은 소스 파일이 적을 때에는 굳이 끄거나 할 필요는 없습니다. 그렇게 시간 차이가 많이 나지는 않는 것 같습니다.
- 그리고 Unity 빌드를 통해 cpp를 통합하는 과정에서 하나의 파일로 만들어지기 때문에 여러가지 문제점이 발생할 수 있습니다. 대표적인 것이 전역변수, #define, namespace 등 겹치거나 할 경우 이를 구분지어 주어야 합니다.