https://dev.epicgames.com/documentation/ko-kr/unreal-engine/packaging-unreal-engine-projects

 

프로젝트 패키징 | 언리얼 엔진 5.4 문서 | Epic Developer Community

언리얼 게임 프로젝트의 배포용 패키지 만들기입니다.

dev.epicgames.com

  • Packaging으로 모든 Code와 Contents가 최신인지, Target Plartform에서 실행하기 적합한 포맷인지 확인한다.
  • File -> Package Project 옵션에서 Package에서 만들 수 있는 대상 Platform 확인 가능

Process

  • Project Source Code를 Compile
  • Cooking
    • 필수 컨텐츠를 Target Platform에서 사용 가능한 Format으로 변환
  • Compile 된 Code와 Cooking된 Contents를 묶어 Windows Installer와 같은 배포 파일 생성
    • Android Packaging은 몇 가지 선택사항이 더 있다.

Game Default Map 설정

  • Packaging을 하려면 Game 시작 시 Load 할 Game Default Map 설정이 필요
    • Default Map이 설정되지 않으면 Packaging 된 Game 시작 시 검은 화면이 나온다.
    • Edit -> Project Setting -> Map & Modes에서 설정

Package 만들기

  • File -> Project Package -> [Platform Name] 선택
  • Target Directory 선택한다.
    • Target Directory를 확인하고 나면 선택된 Platform용으로 Project를 Packaging한다.
  •  Packaging은 매우 오래 걸리는 작업이라 Process가 Background에서 진행된다.
    • 이 때 Editor는 계속 사용할 수 있다.
    • Cancel로 취소 가능
    • Show Log 링크로 자세한 로그 표시 가능
      • Packaging Process가 실패했을 때 오류 사항을 확인하여 버그가 될 수 있는 Warning을 잡아낼 수 있다.
      • 보이지 않을 경우 Window -> Developer Tool -> Output Log / Message Log 옵션으로 활성화 가능
  • Packaging이 성공적으로 끝나면, Target Directory에 Packaging 된 Project가 들어간다.

Distribution

  • App Store나 Google Play Store에 제출하려면 Distribution Mode로 Game Package를 만들어줘야 한다.
    • Packaging -> Packaging Setting -> Distribution 옵션을 체크

IOS

  • Apple의 Developer site에서 배포 Certificate와 MobileProvision을 생성해줘야 한다.
  • Development Certificate와 같은 방식으로 Distribution Certificate 설치
    • 배포 Provision 이름에 "Distro_" 접두사를 붙여준다.
      • Distro_MyProject.mobileprovision이 MyProject.mobileprovision이 된다.

Android

  • .apk File Signing을 할 Key를 생성
  • BuildTool에 정보를 줘야 한다.
    • Engine/Build/Android/Java/SigningConfig.xml
    • 이 파일을 직접 수정하면 모든 Project에 적용
    • Project/Build/Android Directory에 복사하면 해당 Project에만 적용 된다.

Advanced Setting

  • File -> Project Package -> Package Setting
    • 또는 Edit -> Project Setting -> Packaging

Build Configuration

  • Code based Project를 Compile 할 때의 Build Configuration
    • Blueprint 전용 Project에서는 이 옵션이 없다.
  • Code Project Debuging의 경우 DebugGame 선택
    • 이 외의 Debuging은 최소한으로 지원
  • Performance가 좋은 개발용으로는 대부분 Development 선택
  • 최종 빌드의 경우 Debuging 정보와 기능이 제거된 Shipping을 선택

Statging Directory

  • Packaging 된 Build가 들어가게 될 Directory
  • Target Directory 선택 창에서 다른 Directory를 선택하면 자동으로 업데이트

Full Rebuild

  • Code를 전부 다 Compile 할지 여부
    • 비활성화 하면 수정된 Code만 Compile
    • 잘 활용하면 Packaging Process 속도가 빨라질 수 있다.
  • Shipping 빌드의 경우 누락/오래된 버전 갱신을 위해 항상 활성화를 해주는것이 좋다.
  • 기본적으로 활성화 되어있다.

Use Pak File

  • Project의 Asset들을 개별 Fiel로 둘지, 하나의 Package로 만들지 여부
    • 활성화하면 모든 Asset은 하나의 .pak 파일에 들어간다.
    • 비활성화 하면 모든 파일을 하나하나 복사한다.
  • Asset File이 많은 경우, 전송해야 하는 File 양이 줄어들어 배포가 쉬워질 수 있다.
  • 기본적으로 비활성화 되어 있다.

Generate Chunks

  • Streaming Install에 사용할 수 있는 .pak File Chunk 생성 여부

Build Http Chunk Install Data

  • HTTP Chunk Installer 용 Data 생성 여부
  • 이를 통해 Web Server에서 Hosting하여 Runtime에서 설치가 가능

Http Chunk Install Data Directory

  • Build가 완료되면 Data가 설치되는 Driectory

Http Chunk Install Data Version

  • HTTP Chunk Install Data의 Version Name

Include Prerequisites Install

  • Packaging된 Game의 사전 요구사항 Installer를 포함시킬지 여부
    • OS Component 재배포판

Signing and Crypto

  • 출시 때 .Pak 파일을 서명하거나 암호화
    • Data 추출이나 Hacking을 방지
    • Unreal Engine 4.22 이후에서는 OpenSSL Library로 통합 함
  • Project Setting -> Crypto Section

Encrypt Pak INI Files

  • Project의 .pak File에 존재하는 모든 .ini File을 암호화
    • 최소한의 Runtime 비용으로 Data Mining 혹은 변조를 방지할 수 있다.

Encrypt Pak Index

  • .Pak File Index를 암호화
    • 최소한의 Runtime 비용으로 UnrealPak File을 열고 확인
    • 제품의 .Pak File을 Unpack하지 못하도록 한다.

Encrypt UAsset Files

  • .Pak File의 .Uasset 파일을 암호화
    • 이 파일에는 Asset의 Header 정보만 있고 Data 자체는 없다.
  • 이 Data를 암호화 하면 보안성은 향상한다.
    • 하지만 Runtime 비용이 추가되고, Data Entropy가 증가해 Patch 크기가 커질 수 있다.

Encrypt Assets

  • ,Pak File 안의 모든 Asset을 암호화
    • Runtime File I/O Performance에 영향을 준다.
    • Package Data의 Entropy를 증가시켜 Patching System 효율을 떨어트린다.

Enable Pak Signing

  • .Pak File Sign을 활성화/비활성화한다.

Contents Cooking

  • Packaging 없이 특정 Target Platform Contents만 Cooking
    • 반복 작업에서 길고 지루한 Packaging Process를 피할 수 있음
  • File -> Contents Cooking -> [Platform Name] 선택
    • Local Developer Workspace에 있는 Contents를 Update하지, Staging Directory에 Asset을 복사하는 것은 아니다.

Optimize Load Time

  • Package Process 도중 Project Load Time을 최적화 하는 메서드 제공
    • 결과적으로 Game Load Time이 감소함

Event Driven Loader 및 Asynchronous Loading Thread 사용

Event Driven Loader

  • 기본적으로 활성화 되어있는 옵션
    • Project Setting - Engine - Streaming에서 비활성화 가능
  • 대부분의 Project에서는 EDL을 사용하면 Load Time이 절반으로 줄어든다.
    • 안정적이다.
    • Unreal Engine 구버전에 대한 하위 Porting, 수정dl rksmdgkek.
    • Customized Engine Version에 맞게 조정 가능하다.

Asynchronous Loading Thread

  • 기본적으로 비활성화 되어있는 옵션
    • Project Setting - Engine - Streaming에서 활성화 가능
  • Engine을 Customize한 경우 미세조정이 필요할 수 있지만, 보통 ALT는 전반적인 Load Time을 배가시켜준다.
    • 게임의 최초 Load Time
    • 지속적인 Data Streaming Time
  • ALT는 Serialize와 Post-Loading Code를 2개의 별도 Thread에 동시에 실행시키며 동작한다.
  • 이에 따라 Game Code의 다음 항목은 반드시 Thread-safe 해야 한다.
    • UObject Class Construct
    • PostInitProperties Function
    • Serialize Function
  • ALT는 가동되면 Load 속도가 2배가 된다.

Compress .pak File

  • Project Setting -> Packaging -> Advanced Option -> Create compressed cooked packages 체크
  • 대부분의 Platform에서는 자동 압축을 제공하지 않기에 .pak File을 압축하면 Load Time이 단축된다.
  • 다만 플랫폼 별로 고려사항이 있다.

Sony PlayStation 4

  • 모든 PS4에 자동 적용되는 압축과 .pak File 압축은 중복되어도 File Size가 줄어드는 혜택이 없다.
    • 압축 작업만 중복한다.
  • 때문에 .pak File 압축은 하지 않는 것이 좋다.

Nintendo Switch

  • 압축된 File Load가 더 빠를 수 있지만, 압축을 해제하는데 시간이 더 오래 걸릴 수 있다.
  • 타이틀마다 테스트를 해보고 결정해보는 것이 좋다.

Microsoft XBoxOne

  • 가장 빠른 Load Time을 내기 위해서 매우 중요하다.

Steam

  • 사용자가 다운로드 도중에 파일을 압축하므로 다운로드 시간이 .pak File에 영향을 받지 않는다.
    • 하지만 미압축 File의 경우 Steam의 Differential Patch Steam이 더 나을 수 있다. 
  • 압축된 .pak File은 소비자의 시스템 디스크 공간을 절약해준다.
    • 하지만 Patch 할 때 다운로드 시간은 길어진다.

Oculus

  • .pak file 압축을 지원하지 않는다.

Order pak File

  • Load Time 단축을 위해서는 .pak File 순서를 잘 지정해야 한다.
    • Unreal에서는 Data Asset의 필요 순서를 알아내어 더 빠른 Loading Package를 제작하는 Tool을 제공한다.
    • 개념적으로 이 Process는 Profile Drived Optimization와 비슷하다.
  1. -fileopenlog Command-line Option으로 Package Game을 build, Launch해 Engine이 File 순서를 기록하도록 한다.
  2. 게임 주요 영역을 전부 확인하고 게임을 종료한다,
    • 모든 Level, Character, Weapon, Vehicle 등
  3. GameOpenOrder.log 파일을 /Build/WindowsNoEditor/FileOpenOrder/ Directory에 복사한다.
    • Deployed Game에서 .pak File 순서 최적화에 필요한 정보가 들어있다.
    • 예를 들어 Windows Build는 WindowsNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/ 에 있다.
  4. Log File을 배치하고 .pak File을 리빌드한다.
    • 그러면 이번에 생성된 File가 앞에 생성된 모든 ,pak File은 Log File에 나타난 순서를 사용한다.
  • Production 환경에서는 다음 사항을 반드시 해줘야 한다.
    • Log File을 Source Control에 Check-in
    • 주기적으로 -fileopenlog를 붙여 실행한 뒤 업데이트
    • 발매 준비가 되면 마지막으로 한번 더 실행

'UE5 > Utility' 카테고리의 다른 글

[Basic] Source Control  (0) 2024.05.09
[Programming Tool] LLM(Low-level Memory Tracker)  (0) 2024.05.07
[ProgrammingTool] Sparse Class Data  (0) 2024.05.07

+ Recent posts