언리얼 프로젝트는 사용자들에게 배포하기 전에 적절하게 패키징해야 합니다. 패키징을 통해 모든 코드와 콘텐츠가 최신인지, 타깃 플랫폼에서 실행하기에 적합한 포맷으로 되어있는지를 확인합니다.
패키징 프로세스 중에는 여러 단계가 수행됩니다. 프로젝트별 소스 코드가 먼저 컴파일됩니다. 코드가 컴파일되면 필요한 모든 콘텐츠가 타깃 플랫폼에서 사용할 수 있는 포맷으로 변환, 즉 '쿠킹'됩니다. 그런 다음 컴파일된 코드와 쿠킹된 콘텐츠가 인스톨러 같은 배포 가능 파일 세트로 번들화됩니다.
메인 파일(File) 메뉴 아래에 프로젝트 패키지(Package Project)라는 옵션과 서브메뉴가 있습니다. 이 서브메뉴는 프로젝트를 패키징할 수 있는 모든 지원 플랫폼 목록을 제공합니다.
Android 패키징의 경우 여러 가지 선택 항목이 있습니다. 자세한 내용은 Android 레퍼런스 페이지를 참조하세요.
패키징 전에 설정할 수 있는 몇 가지 고급(Advanced) 옵션도 있습니다.
게임 디폴트 맵 설정하기
게임을 패키징하기 전, 먼저 패키지로 만든 게임이 시작될 때 로드할 게임 디폴트 맵(Game Default Map)을 설정해야 합니다. 맵을 설정하지 않고 기본 프로젝트를 사용하는 경우, 패키지로 만든 게임이 시작될 때 검은색 화면만 표시됩니다. 일인칭(First Person) 템플릿이나 삼인칭(Third Person) 템플릿 같은 템플릿 맵 중 하나를 사용한 경우, 시작 맵이 로드됩니다.
게임 디폴트 맵을 설정하려면 에디터의 메인 메뉴에서 편집(Edit) > 프로젝트 세팅(Project Settings) > 맵 & 모드(Maps & Modes)를 클릭합니다.
패키지 생성하기
특정 플랫폼에 대한 프로젝트를 패키징하려면, 에디터의 메인 메뉴에서 파일(File) -> 프로젝트 패키지(Package Project) > [PlatformName]을 클릭합니다.
그러면 타깃 디렉터리를 선택할 수 있는 대화 상자가 표시됩니다. 패키징이 성공적으로 완료되면, 이 디렉터리에 패키지로 만든 프로젝트가 포함됩니다.
타깃 디렉터리를 확인하면 선택한 플랫폼용으로 프로젝트를 패키징하는 실제 프로세스가 개시됩니다. 패키징에는 시간이 많이 소요될 수 있으므로 패키징 프로세스는 백그라운드에서 실행되며, 그동안 에디터를 계속 사용할 수 있습니다. 진행률을 나타내는 상태 표시기가 에디터의 오른쪽 하단에 표시됩니다.
상태 표시기에는 패키징 프로세스를 중지할 수 있는 취소 버튼도 있습니다. 또한 로그 표시(Show Log) 링크를 사용하여 확장된 출력 로그 정보를 표시할 수 있습니다. 이는 패키징 프로세스가 실패한 경우 원인을 파악하거나 제품의 잠재적인 버그를 파악할 수 있는 경고를 포착하는 데 유용합니다.
오류 및 경고와 같은 가장 중요한 로그 메시지는 일반 메시지 로그(Message Log) 창에 기록됩니다.
이러한 창이 보이지 않는 경우, 창(Window) > 개발자 툴(Developer Tools) > 출력 로그(Output Log)/메시지 로그(Message Log) 옵션을 사용하여 액세스할 수 있습니다.
분포
App Store나 Google Play Store에 iOS 또는 Android 게임을 제출하려면 배포(Distribution) 모드에서 패키지를 생성해야 합니다. 패키지를 생성하려면 패키징(Packaging) 메뉴의 패키징 세팅(Packaging Settings) 옵션으로 이동하여 배포 체크박스에 체크합니다.
iOS에서는 Apple의 개발자 웹사이트에서 배포 인증서(Distribution Certificate)와 MobileProvision을 생성해야 합니다. 배포 인증서를 개발 인증서와 같은 방법으로 설치하고 배포 프로비저닝의 이름을 다른 프로비저닝 옆에 'Distro_' 접두사를 붙여 지정합니다(따라서 Distro_MyProject.mobileprovision
과 MyProject.mobileprovision
이 모두 보유하게 됩니다).
Android에서는 .apk
파일에 서명할 키를 생성하고언리얼 빌드 툴에 SigningConfig.xml
이라는 파일을 통해 몇 가지 정보를 제공해야 합니다. 이 파일은 설치된 엔진 디렉터리(Engine/Build/Android/Java/
)에 있습니다. 이 파일을 편집하면 모든 프로젝트에 적용됩니다. 하지만, 이 파일을 하위 디렉터리인 Java/
를 빼고 프로젝트의 Build/Android/
디렉터리에 복사하면, 해당 프로젝트에만 적용됩니다. 키를 생성하고 파일을 작성하는 방법에 대한 지침은 파일 자체에 있습니다.
Advanced Settings
메인 메뉴에서 파일(File) -> 프로젝트 패키지(Package Project) > 프로젝트 세팅...(Project Settings...) 또는 편집(Edit) > 프로젝트 세팅(Package Settings) > 패키징(Packaging)을 클릭하면 패키징 기능의 고급 환경설정 옵션이 표시됩니다.
현재 여기에는 다음과 같은 옵션이 있습니다.
옵션 | Description |
---|---|
빌드 환경설정(Build Configuration) | 코드 기반 프로젝트를 컴파일할 빌드 환경설정입니다. 코드 프로젝트를 디버깅하려면 DebugGame을 선택합니다. 디버깅을 최소한으로 지원하지만 퍼포먼스는 더 좋은 대부분의 다른 개발의 경우, Development를 선택합니다. 디버깅 정보가 없고 디버깅 관련 기능(예: 디버그 셰이프 드로잉 또는 화면에 디버그 메시지 인쇄)이 없는 최종 배포 빌드의 경우 Shipping을 선택합니다. 블루프린트 전용 프로젝트에는 DebugGame 빌드 생성 옵션이 없다는 점에 유의하세요. |
스테이징 디렉터리(Staging Directory) | 패키지로 만든 빌드가 담길 디렉터리입니다. 이 디렉터리는 타깃 디렉터리 선택에서 다른 디렉터리를 선택하면 자동으로 업데이트됩니다. |
풀 리빌드(Full Rebuild) | 모든 코드를 컴파일할지 여부입니다. 비활성화하면 수정된 코드만 컴파일됩니다. 이렇게 하면 패키징 프로세스가 빨라질 수 있습니다. 배포 빌드의 경우 항상 풀 리빌드를 수행하여 누락되거나 오래된 코드가 없는지 확인해야 합니다. 이 옵션은 기본적으로 활성화됩니다. |
Pak 파일 사용(Use Pak File) | 프로젝트의 에셋을 개별 파일로 패키징할지, 아니면 단일 패키지로 패키징할지 여부입니다. 활성화하면 모든 개별 파일을 복사하는 대신,모든 에셋을 하나의 .pak에 넣습니다. 프로젝트에서 많은 에셋 파일을 사용하는 경우, Pak 파일을 사용하면 전송해야 하는 파일의 양이 줄어들어 배포가 더 쉬워질 수 있습니다. 이 옵션은 기본적으로 비활성화됩니다. |
청크 생성(Generate Chunks) | 스트리밍 설치에 사용할 수 있는 .pak 파일 청크 생성 여부입니다. |
HTTP 청크 인스톨 데이터 빌드(Build Http Chunk Install Data) | HTTP 청크 인스톨러를 위한 데이터를 생성할지 여부입니다. 이를 통해 이 데이터를 웹서버에서 호스팅하여 런타임에 설치할 수 있습니다. |
HTTP 청크 인스톨 데이터 디렉터리(Http Chunk Install Data Directory) | 데이터가 빌드된 후 설치되는 디렉터리입니다. |
HTTP 청크 인스톨 데이터 버전(Http Chunk Install Data Version) | HTTP 청크 설치 데이터의 버전 이름입니다. |
필수 구성 요소 인스톨러에 포함(Include Prerequisites Installer) | 재배포 가능 운영 체제 컴포넌트처럼 패키지로 만든 게임의 필수 구성 요소에 대한 인스톨러를 포함할지 여부를 지정합니다. |
항상 쿠킹할 디렉터리(Directories to Always Cook) | 항상 쿠킹해야 하는 파일이 있는 디렉터리 목록입니다. 기본적으로 패키징 기능은 게임에서 참조하는 모든 콘텐츠를 자동으로 탐지하고 쿠킹합니다. 커스텀 슬레이트 UI의 텍스 같은 일부 필수 콘텐츠는 직접 참조되지 않을 수도 있습니다. 그러한 콘텐츠가 있는 디렉터리를 여기에 나열하여 패키지에 포함해야 합니다. |
서명 및 암호화
언리얼 엔진 4.22 버전 출시와 함께 데스크톱 플랫폼(Windows, Mac, Linux)을 위한 업계 표준 OpenSSL 라이브러리를 통합했습니다.
출시된 제품으로 배포될 때, 일반적으로 데이터 추출이나 변조를 막기 위해 .Pak
파일을 서명하거나 암호화할 수 있습니다. 프로젝트의 암호화 세팅을 활성화하거나 비활성화하거나 조정하려면 프로젝트 세팅(Project Settings) 메뉴로 이동하여 암호화(Crypto) 섹션을 찾습니다.
이 메뉴에서 사용할 수 있는 세팅은 다음과 같습니다.
옵션 | Description |
---|---|
Pak INI 파일 암호화(Encrypt Pak INI Files) | 프로젝트의 |
Pak 인덱스 암호화(Encrypt Pak Index) |
|
UAsset 파일 암호화(Encrypt UAsset File) |
|
에셋 암호화(Encrypt Assets) |
이 세팅은 런타임 파일 I/O 퍼포먼스에 측정 가능한 영향을 미치며, 패키지로 만든 최종 데이터의 엔트로피 양을 증가시켜 배포 패치 시스템의 효율이 감소한다는 점을 유의하세요. |
Pak 사이닝 활성화(Enable Pak Signing) | .pak 파일 사이닝을 활성화하거나 비활성화합니다. |
또한 서명 또는 암호화를 위한 키를 설정하거나 지울 수도 있습니다.
콘텐츠 쿠킹
개발자가 새로운 게임 콘텐츠나 수정된 게임 콘텐츠를 반복작업할 때 모든 콘텐츠를 스테이징 디렉터리에 패키징한 다음 거기에서 실행하는 긴 프로세스를 항상 거치고 싶지는 않을 것입니다. 따라서 파일(File) > 콘텐츠 쿠킹(Cook Content) > [PlatformName]을 클릭하여 모든 콘텐츠를 패키징하지 않고 특정 타깃 플랫폼에 대해서만 콘텐츠를 쿠킹할 수 있습니다.
이 기능은 프로젝트의 로컬 개발자 워크스페이스에 있는 콘텐츠를 업데이트하며, 스테이징 디렉터리에 어떤 에셋도 복사하지 않습니다. 로컬 개발자 워크스페이스에서 직접 게임을 실행하여 빠르게 반복작업을 수행할 수 있습니다.
로드 시간 최적화
짧은 로딩 시간은 오픈 월드 게임에 필수적이지만, 어떤 타입의 게임에서든 중요합니다. 언리얼 엔진은 패키징 프로세스 중에 프로젝트의 로딩 시간을 최적화하는 몇 가지 메서드를 제공합니다. 다음은 게임의 로딩 시간을 줄이기 위한 몇 가지 권장 사항입니다. 프로젝트 패키징 방법에 대한 자세한 내용은 게임 패키징 및 쿠킹 섹션을 참조하세요.
이벤트 기반 로더 및 비동기 로딩 스레드 사용하기
비동기 로딩 스레드(Asynchronous Loading Thread, ALT)는 디폴트로 비활성화되어 있지만, 프로젝트 세팅 메뉴의 엔진(Engine) > 스트리밍(Streaming) 섹션에서 활성화할 수 있습니다. 수정된 엔진의 경우 약간의 미세조정이 필요할 수 있지만, ALT를 사용하면 일반적으로 '사전' 로딩 시간이 있는 게임과 지속적으로 데이터를 스트리밍하는 게임까지 포함하여 로딩 속도가 두 배로 빨라집니다. ALT는 직렬화 및 포스트 로딩 코드를 두 개의 별도 스레드에서 동시에 실행하는 방식으로 작동하며, 그 결과 게임 코드의
UObject
클래스 생성자,PostInitProperties
함수 및Serialize
함수가 스레드 세이프여야 한다는 요구 사항이 추가됩니다. ALT를 활성화하면 로딩 속도가 두 배로 빨라집니다. 비동기 로딩 메서드(C++) 사용에 대한 자세한 내용은 비동기 에셋 로딩 페이지를 참조하세요.이벤트 주도형 로더(Event-Driven Loader, EDL)는 디폴트로 활성화되어 있지만, 프로젝트 세팅 메뉴의 엔진 > 스트리밍 섹션에서 비활성화할 수 있습니다. 대부분의 프로젝트에서 EDL을 사용하면 로드 시간을 절반으로 줄일 수 있습니다. EDL은 안정적이며 이전 버전의 언리얼 엔진으로 백포트하거나, 미세조정하여 커스터마이징된 엔진 버전에 맞게 커스터마이징하거나 수정할 수 있습니다.
.pak 파일 압축하기
프로젝트에서
.pak
파일 압축을 사용하려면 프로젝트 세팅을 열고 패키징 섹션을 찾습니다. 패키징 섹션에서 패키징 제목의 고급 부분을 열고 표시되는 '압축된 쿠킹 패키지 생성(Create compressed cooked packages)'이라는 체크박스에 체크합니다.대부분의 플랫폼은 자동 압축을 제공하지 않으며,
.pak
파일을 압축하면 로딩 시간이 단축되지만 몇 가지 특별한 경우를 고려해야 합니다.
플랫폼 | 권장 사항 |
---|---|
Steam | Steam은 사용자가 파일을 다운로드하는 동안 파일을 압축하므로 초기 다운로드 시간은 게임의 .pak 파일 압축에 영향을 받지 않습니다. 하지만 Steam의 차등 패치 시스템은 압축되지 않은 파일에서 더 잘 작동합니다. 압축된 .pak 파일을 사용하면 구매자의 시스템 공간은 절약되지만, 패치 적용 시 다운로드 시간이 더 오래 걸립니다. |
Oculus |
|
Pak 파일 순서 지정
잘 정돈된 .pak
파일은 로딩 시간을 줄이는 데 매우 중요합니다. .pak
파일 순서를 최적으로 정렬하는 것을 지원하기 위해, UE4에서는 데이터 에셋이 필요한 순서를 파악하고 더 빠르게 로딩되는 패키지를 빌드하는 툴세트를 제공합니다. 개념적으로 이 프로세스는 프로파일 가이드 최적화와 비슷합니다. .pak
파일의 순서를 지정하는 방법은 다음과 같습니다.
-fileopenlog
명령줄 옵션을 사용하여 패키지로 만든 게임을 빌드하고 실행합니다. 이 옵션을 사용하면 엔진이 파일을 여는 순서를 기록합니다.게임의 모든 주요 영역을 실행합니다. 모든 레벨, 모든 플레이 가능 캐릭터, 모든 무기, 모든 비히클 등을 로드합니다. 모든 콘텐츠를 로드한 다음에는 게임을 종료합니다.
디플로이된 게임에
GameOpenOrder.log
라는 파일이 있는데, 이 파일에는 .pak 파일 순서 최적화에 필요한 정보가 들어 있습니다. 예를 들어, Windows 빌드의 경우Windows/(YourGame)/Build/Windows/FileOpenOrder/
에 로그 파일이 있습니다. 이 파일을/Build/Windows/FileOpenOrder/
경로 아래의 개발 디렉터리에 복사합니다. Mac 빌드의 경우에는MacNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/
에 로그 파일이 있습니다. 이 파일을Build/Mac/FileOpenOrder/
경로 아래의 개발 디렉터리에 복사합니다.로그 파일을 복사한 다음에는
.pak
파일을 리빌드합니다. 그러면 이후 생성되는 모든.pak
파일이 로그 파일에 표시된 파일 순서대로 정렬됩니다.
프로덕션 환경에서는 로그 파일을 소스 컨트롤에 체크인하고 게임 출시 준비가 완료되었을 때의 최종 실행을 포함하여 주기적으로 -fileopenlog
옵션을 새로 실행하고, 그 결과로 업데이트해야 합니다.