언리얼 게임 싱크(UnrealGameSync, UGS) 를 사용한 빌드 동기화 및 컴파일링은 언리얼 엔진(UE) 을 컴파일링할 수 있고 일련의 스크립트를 사용하여 빌드 프로세스를 자동화하는 IDE가 로컬 장치에 있는지에 따라 달라집니다. 그러나 프로젝트의 많은 참여자는 코드 기반으로 작업하지 않거나 IDE에 액세스 권한이 없습니다. 이런 사용자들도 프로젝트의 최신 빌드를 사용할 수 있도록, UGS는 빌드에 대한 사전 컴파일링된 바이너리(Precompiled Binary, PCB) 추가를 지원합니다. PCB는 .zip
파일로 퍼포스에 제출하여 체인지리스트와 연결할 수 있습니다. 그런 후에 UGS는 로컬로 컴파일링하는 대신 .zip
파일의 콘텐츠를 동기화 및 추출할 수 있습니다.
이때 로컬로 컴파일링할 때와 같은 유저 인터페이스를 사용하지만, 일치하는 바이너리가 없는 변경 사항은 회색으로 표시됩니다. 환경설정이 완료되면 사용자는 옵션(Options) 메뉴 아래 있는 사전 컴파일링된 바이너리 동기화(Sync Precompiled Binaries) 에 체크하여 사전 컴파일링된 바이너리 사용을 허용받을 수 있습니다.
기본 퍼포스 설정
다음 단계는 UE 프로젝트에서 사전 컴파일링된 바이너리를 사용하기 위해 사용자에게 필요한 것을 설명합니다. 이 절차는 사용자가 소스 컨트롤로 사용하기 위한 퍼포스 설정을 이미 완료했다고 가정합니다. 퍼포스 서버의 콘텐츠를 UGS와 함께 사용하도록 설정하려면 여기에 설명된 대로 진행합니다.
사용자는 엔진 소스 코드, 언리얼의 빌드 프로세스로 생성되지 않은 종속성 및 프로젝트가 포함된 하나의 스트림이 필요합니다.
필요한 언리얼 엔진 파일이 모두 존재하는지 확인하려면 사용자는 에픽의 기존 퍼포스 릴리스 스트림 중 하나에서 복사해야 합니다.
//UE/Release-4.xx 명명 규칙에 따른 다른 릴리스 스트림에서 복사해도 됩니다. 개발자가 로컬로 빌드를 시작한 후 스트림 사본에 다른 파일이 추가되지 않도록, .p4ignore.txt
파일이 복사되었는지 반드시 확인합니다.
사용자는 GitHub 소스 빌드를 사용하여 GitDependencies.exe
를 실행하고 수집한 종속성뿐 아니라 전체 소스를 업로드할 수 있습니다. 에픽의 퍼포스 스트림 중 하나를 복사하는 것은 여전히 권장된 경로이며, 파일의 수집, 생성, 업로드 방법과 상관없이 .p4ignore.txt
파일은 반드시 스트림에서 복사해야 합니다.
퍼포스 내에서 파일을 어떻게 설정하기로 결정하든, 파일 유형과 권한이 설정하는 릴리스의 릴리스 스트림과 일치하도록 합니다. 우리의 스트림에서 쓰기 가능하다고 표시된 파일은 여러분의 스트림에서도 쓰기 가능해야 합니다.
-
쓰기 가능 항목과 불가능 항목의 불일치로 인해 빌드 또는 런타임 오류가 발생할 수 있습니다. 이러한 권한을 확인하려면 퍼포스 에서 스트림을 열고 파일명 오른쪽을 확인합니다.
-
여러분의 스트림에서 파일 유형이나 권한을 변경해야 하는 경우, 편집을 위해 파일을 연 후 우클릭하고 파일 타입 변경(Change Filetype) 을 클릭합니다.
이렇게 하면 우리의 릴리스 스트림과 일치하도록 파일 타입과 권한을 편집할 수 있는 메뉴가 열립니다.
빌드 또는 런타임 동안 특정 파일에 액세스 불가(Access Denied) 오류가 발생한다면, 이러한 권한이 제대로 설정되지 않았을 가능성이 큽니다.
-
UGS와 사용하는 모든 프로젝트는 네이티브 프로젝트여야 하고 언리얼 엔진용 파일과 같은 스트림에 있어야 합니다. 네이티브 프로젝트는 언리얼 디렉터리 구조의 최상위 디렉터리에서 발견되거나
.uprojectidrs
파일에 목록화된 경로의 한 레벨 깊이에서(언리얼 디렉터리 구조의 최상위 부분에서도) 발견할 수 있는 프로젝트입니다.
스트림 설정하기
사용자는 사전 컴파일링된 바이너리 .zip
파일을 보관하기 위해 별도의 스트림을 사용해야 합니다.
하나의 스트림을 사용할 수도 있지만, 첫 번째 스트림에 액세스할 수 있는 사용자라면 모두 액세스할 수 있는 두 번째 개별 스트림을 사용할 것을 강력히 권장합니다. 이렇게 하면 PCB를 사용하지 않는 팀 구성원의 이탈을 피할 수 있습니다.
이를 위해 별도의 워크스페이스를 유지할 필요는 없습니다. 언리얼 게임 싱크는 파일을 동기화하는 데 사용하는 것과 동일한 로그인 크리덴셜을 사용하여 비저장 방식으로 PCB를 가져옵니다.
PCB가 업로드될 스트림은 다음과 같이 구성합니다.
-
프로젝트의 루트 디렉터리 아래에
Build/UnrealGameSync.ini
를 추가하고 바이너리가 업로드될 퍼포스 위치를 참조합니다. UGS가 퍼포스에서 PCB를 가져올 때 파일을 검색하게 됩니다.Build\UnrealGameSync.ini
의 예시 항목입니다.[//UE4/Main/Samples/Games/ShooterGame/ShooterGame.uproject] ZippedBinariesPath=//UE4/Dev-Binaries/++UE4+Main-Editor.zip
UnrealGameSync.ini
가[Unreal Project Root Directory]/Build/*
위치에 있어야 합니다. -
ZippedBinariesPath
를 지정할 때 기억해야 할 세부 사항이 있습니다.//
UE4/Dev-Binaries/++UE4+Main-Editor.zip
이라는 이름은 아래 업로드 부분에서 언급한 ArchiveStream 실행인자와 일치해야 하며, 여기서 ++UE4+Main은 슬래시가 '+' 문자로 이스케이프 처리된 현재 분기의 이름입니다. 실행인자를 사용할 때는 '+' 문자 대신 슬래시가 있어야 합니다.- PCB 스트림에 액세스할 수 있는 모든 사용자 계정은 새로운 PCB 세트를 업로드할 수 있지만 이 작업을 수행하는 방법은 사용자에게 달려 있습니다. 이는 스튜디오에서 디플로이하려는 방법에 따라 달라지기 때문입니다. 사용자가 수동으로 업로드를 수행할 수도 있고, 자동화된 빌드 노드가 수행할 수도 있습니다.
사전 컴파일링된 바이너리 생성 및 업로드하기
두 스트림을 설정하고 사용자가 액세스 권한을 받았다면, 이제 PCB를 생성하고 지정된 PCB 스트림에 업로드할 차례입니다.
PCB를 생성하고 업로드하려면 다음에 따릅니다.
-
메인 스트림 의 콘텐츠를 퍼포스에서 동기화합니다.
-
[UE Root]/Engine/Build/Graph/Examples/BuildEditorAndTools.xml
에 있는 예제에 기초한 BuildGraph 스크립트를 실행하여, PCB를 생성하고 올바른 퍼포스 위치에 업로드합니다(-ArchiveStream
실행인자로 위치 지정). 다음은BuildEditorAndTools
를 사용한 명령의 예시입니다.Engine\Build\BatchFiles\RunUAT.bat BuildGraph -Script=Engine/Build/Graph/Examples/BuildEditorAndTools.xml -Target="Submit To Perforce for UGS" -set:EditorTarget=ShooterGameEditor -set:ArchiveStream=//UE4/Dev-Binaries -p4 -submit
이 예제에서 ShooterGame 은 네이티브 프로젝트이고 사용자가 PCB로 업로드하려는 프로젝트는 모두 네이티브여야 합니다.
BuildEditorAndTools.xml
사용에 관한 추가 정보는 파일 시작 시의 코멘트에서 찾을 수 있습니다.ArchiveStream
은 앞에서 지정한ZippedBinariesPath
와 일치해야 하지만, 슬래시를 이스케이프 처리한 '+' 문자 대신 슬래시를 사용합니다. -
이 예시에서는
//UE4/Dev-Binaries/++UE4+Main-Editor.zip
에 zip 파일을 제출합니다. 여기서 ++UE4+Main은 슬래시가 '+' 문자로 이스케이프 처리된 현재 분기의 이름입니다.UnrealGameSync.ini
내의ZippedBinariesPath
값도 동일한 경로로 설정해야 합니다.CL 설명이 올바른 형식인지 확인하세요. UGS는 각각의 CL 설명이 'CL'로 시작하고 그 뒤에 8자리 숫자가 있을 것으로 예상하므로(CL ########) 바이너리와 연결된 체인지리스트를 알 수 있습니다.
이
.zip
파일에는 PDB가 포함되어 있지만 빌드 크기를 줄이기 위해 제거됩니다. 이렇게 하면 충돌로부터 콜스택을 수집할 수는 있지만 온전한 디버깅은 허용되지 않습니다. 팀에 더 좋은 심볼 스토리지가 필요하다면 심볼 서버를 사용하는 것이 좋은데, 이는 IT 및 디플로이 팀이 시행할 일입니다.
UGS에서 사전 컴파일링된 바이너리 사용하기
사전 컴파일링된 바이너리가 성공적으로 생성되어 보조 스트림에 업로드된 후, UGS는 주 스트림에 있는 파일을 사용하여 메인 스트림으로 PCB를 탐지하고 사용할 수 있습니다.
-
사전 컴파일링된 바이너리 동기화(Sync Precompiled Binaries) 옵션을 활성화하고 최신 상태로 동기화합니다. 그림의 예제는 사전 컴파일링된 바이너리가 없는 스트림이지만 이전 단계에서 바이너리를 제대로 구성했다면 해당 옵션을 선택할 수 있을 것입니다.
-
이 옵션을 선택한 사용자는 엔진을 빌드하는 대신 PCB를 사용하면 됩니다.