https://dev.epicgames.com/documentation/ko-kr/unreal-engine/packaging-unreal-engine-projects
- 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이 된다.
- 배포 Provision 이름에 "Distro_" 접두사를 붙여준다.
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와 비슷하다.
- -fileopenlog Command-line Option으로 Package Game을 build, Launch해 Engine이 File 순서를 기록하도록 한다.
- 게임 주요 영역을 전부 확인하고 게임을 종료한다,
- 모든 Level, Character, Weapon, Vehicle 등
- GameOpenOrder.log 파일을 /Build/WindowsNoEditor/FileOpenOrder/ Directory에 복사한다.
- Deployed Game에서 .pak File 순서 최적화에 필요한 정보가 들어있다.
- 예를 들어 Windows Build는 WindowsNoEditor/(YourGame)/Build/WindowsNoEditor/FileOpenOrder/ 에 있다.
- 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 |