패키징 및 빌드 설정
언리얼 엔진 프로젝트를 다양한 플랫폼에 맞게 패키징하고 빌드하는 과정은 게임 출시의 핵심 단계입니다.
이 절에서는 효율적인 패키징 및 빌드 설정 방법을 살펴보겠습니다.
프로젝트 패키징 설정
프로젝트 설정 파일(DefaultGame.ini
) 구성
[/Script/UnrealEd.ProjectPackagingSettings]
Build=IfProjectHasCode
BuildConfiguration=Shipping
BuildTarget=
StagingDirectory=(Path="")
FullRebuild=False
ForDistribution=True
IncludeDebugFiles=False
BlueprintNativization=False
bWarnIfPackagedWithoutNativizationFlag=True
UsePakFile=True
bGenerateChunks=False
bChunkHardReferencesOnly=False
IncludePrerequisites=True
IncludeAppLocalPrerequisites=False
bShareMaterialShaderCode=True
bSharedMaterialNativeLibraries=True
ApplocalPrerequisitesDirectory=(Path="")
IncludeCrashReporter=False
InternationalizationPreset=English
CulturesToStage=en
DefaultCulture=en
bCookAll=False
bCookMapsOnly=False
bCompressed=True
bSkipEditorContent=True
타겟 플랫폼별 빌드 구성
플랫폼별 빌드 설정 관리자
UCLASS()
class UPlatformBuildManager : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Build")
void ConfigureBuildForPlatform(EPlatformType Platform);
private:
void SetupPCBuild();
void SetupConsoleBuild();
void SetupMobileBuild();
};
void UPlatformBuildManager::ConfigureBuildForPlatform(EPlatformType Platform)
{
switch (Platform)
{
case EPlatformType::PC:
SetupPCBuild();
break;
case EPlatformType::Console:
SetupConsoleBuild();
break;
case EPlatformType::Mobile:
SetupMobileBuild();
break;
}
// 공통 설정 적용
GConfig->SetBool(TEXT("/Script/UnrealEd.ProjectPackagingSettings"), TEXT("bCompressed"), true);
}
쿠킹 옵션 최적화
쿠킹 옵션 설정
UCLASS()
class UCookingOptimizer : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Build")
void OptimizeCookingOptions();
private:
void SetCookingRules();
void ConfigureAssetCooking();
};
void UCookingOptimizer::OptimizeCookingOptions()
{
SetCookingRules();
ConfigureAssetCooking();
// 쿠킹 명령어 예시
FString CookCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=Cook -targetplatform=WindowsNoEditor -fileopenlog"), *FPaths::GetProjectFilePath());
FPlatformProcess::CreateProc(*CookCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}
에셋 패키징 전략
에셋 패키징 매니저
UCLASS()
class UAssetPackagingManager : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Build")
void PackageAssets();
private:
void OrganizeAssetChunks();
void CompressAssets();
void GenerateAssetRegistry();
};
void UAssetPackagingManager::PackageAssets()
{
OrganizeAssetChunks();
CompressAssets();
GenerateAssetRegistry();
// 에셋 패키징 명령어 예시
FString PackageCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=Cook -targetplatform=WindowsNoEditor -pak"), *FPaths::GetProjectFilePath());
FPlatformProcess::CreateProc(*PackageCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}
패치 및 DLC 준비
패치 및 DLC 관리자
UCLASS()
class UPatchDLCManager : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Build")
void PreparePatchAndDLC();
private:
void SetupPatchStructure();
void ConfigureDLCContent();
};
void UPatchDLCManager::PreparePatchAndDLC()
{
SetupPatchStructure();
ConfigureDLCContent();
// 패치 생성 명령어 예시
FString PatchCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=DiffPatch -base=BaseBuild -patch=PatchContent"), *FPaths::GetProjectFilePath());
FPlatformProcess::CreateProc(*PatchCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}
빌드 자동화 스크립트 작성
빌드 자동화 스크립트 예시 (PowerShell)
# Build.ps1
param (
[string]$Platform = "Win64",
[string]$Configuration = "Shipping"
)
$UE4EditorCmd = "C:\Program Files\Epic Games\UE_4.27\Engine\Binaries\Win64\UE4Editor-Cmd.exe"
$ProjectFile = "C:\Projects\MyGame\MyGame.uproject"
# 프로젝트 빌드
& $UE4EditorCmd $ProjectFile -run=Compile -platform=$Platform -configuration=$Configuration
# 쿠킹
& $UE4EditorCmd $ProjectFile -run=Cook -targetplatform=$Platform
# 패키징
& $UE4EditorCmd $ProjectFile -run=Package -platform=$Platform -configuration=$Configuration
Write-Host "Build completed for $Platform in $Configuration configuration."
배포 시나리오에 따른 패키징 고려사항
스팀 배포용 설정
[/Script/SteamSourceSDK.SteamSourceSDKSettings]
AppId=480
콘솔 스토어 설정 (예 : PlayStation)
[/Script/PS4DevSettings.PS4DevSettings]
TitleId=ABCD12345
모바일 앱 스토어 설정
[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
PackageName=com.YourCompany.YourGameName
bPackageDataInsideApk=True
빌드 크기 최적화 전략
빌드 크기 최적화 매니저
UCLASS()
class UBuildSizeOptimizer : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Build")
void OptimizeBuildSize();
private:
void CompressTextures();
void StripDebugSymbols();
void RemoveUnusedAssets();
};
void UBuildSizeOptimizer::OptimizeBuildSize()
{
CompressTextures();
StripDebugSymbols();
RemoveUnusedAssets();
// 빌드 크기 최적화 명령어 예시
FString OptimizeCommand = FString::Printf(TEXT("UE4Editor-Cmd.exe %s -run=ResavePackages -compress=ZLIB"), *FPaths::GetProjectFilePath());
FPlatformProcess::CreateProc(*OptimizeCommand, nullptr, true, false, false, nullptr, 0, nullptr, nullptr);
}
효율적인 빌드 파이프라인 구축
CI/CD 파이프라인 구성 (예 : Jenkins)
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
bat "powershell.exe -File Build.ps1 -Platform Win64 -Configuration Shipping"
}
}
stage('Package') {
steps {
bat "powershell.exe -File Package.ps1"
}
}
stage('Deploy') {
steps {
bat "powershell.exe -File Deploy.ps1"
}
}
}
}
일반적인 문제와 해결 방법
문제 해결 가이드
1. 빌드 실패
- 로그 파일 확인 (
Engine/Saved/Logs/
) - 프로젝트 재생성 시도
- 엔진 버전 업데이트 확인
2. 패키징 오류
- 쿠킹 단계 검증
- 플랫폼 SDK 설치 확인
- 에셋 종속성 확인
3. 성능 이슈
- 프로파일링 툴 사용 (언리얼 인사이트)
- 최적화 설정 재검토
- 에셋 최적화 수행
최종 사용자 경험을 고려한 빌드 최적화 팁
1. 초기 로딩 시간 최소화
- 에셋 스트리밍 최적화
- 초기 로드 화면 구현
2. 패치 크기 최소화
- 증분 패치 시스템 구현
- 에셋 버전 관리 시스템 도입
3. 안정성 보장
- 철저한 QA 프로세스
- 크래시 리포팅 시스템 통합
4. 다양한 하드웨어 지원
- 스케일러블 설정 구현
- 자동 그래픽 설정 조정 기능
5. 빠른 업데이트 및 패치
- 효율적인 패치 배포 시스템 구축
- 백그라운드 다운로드 및 설치 기능
언리얼 엔진 프로젝트의 패키징 및 빌드 설정은 게임의 최종 품질과 사용자 경험을 결정짓는 중요한 과정입니다.
프로젝트 패키징 설정을 통해 빌드의 기본적인 구조와 옵션을 결정하고 타겟 플랫폼별 빌드 구성을 통해 각 플랫폼의 특성에 맞는 최적화를 수행할 수 있습니다.
쿠킹 옵션 최적화는 빌드 프로세스의 효율성과 최종 빌드의 품질을 향상시키는 데 중요합니다.
에셋 패키징 전략을 통해 게임 콘텐츠를 효율적으로 관리하고 패치 및 DLC 준비를 통해 게임의 수명주기 전반에 걸친 콘텐츠 업데이트를 계획할 수 있습니다.
빌드 자동화 스크립트 작성은 반복적인 빌드 프로세스를 효율화하고 일관성을 유지하는 데 도움이 됩니다.
다양한 배포 시나리오에 따른 패키징 고려사항을 통해 각 플랫폼의 요구사항을 충족시킬 수 있습니다.
빌드 크기 최적화 전략은 다운로드 시간을 줄이고 스토리지 사용을 최소화하는 데 중요합니다.
효율적인 빌드 파이프라인 구축을 통해 개발 팀의 생산성을 높이고 빌드 품질을 일관되게 유지할 수 있습니다.
일반적인 문제와 해결 방법에 대한 이해는 빌드 프로세스에서 발생할 수 있는 장애물을 신속하게 해결하는 데 도움이 됩니다.
최종 사용자 경험을 고려한 빌드 최적화 팁은 게임의 전반적인 품질과 사용자 만족도를 높이는 데 기여합니다.